PmWiki内置支持密码保护wiki站点的各个区域。密码可以应用于各个页面Wiki组,或发送到整个wiki站点。请注意,这里描述的密码保护机制只是整个系统(和wiki)安全性的一小部分,请参阅PmWiki。安全以便对此进行更多讨论。
作者可以使用PmWiki向各个页面和WikiGroups添加密码,如中所述密码然而,Wiki管理员也可以在中设置密码本地/config.php
如下所述。(请注意,无法在每个组或每个页面自定义文件中可靠地设置密码。请参阅常见问题解答部分详细信息。)
密码基础知识
PmWiki支持对wiki页面的多种访问级别,称为授权级别:
阅读
密码允许查看wiki页面的内容编辑
密码控制wiki页面的编辑和修改(针对垃圾邮件)属性
密码控制谁可以在页面上设置密码(以及可能的其他未来属性)上传
密码(如果启用上载)控制文件和附件的上载- 此外,所有可用操作可以通过密码授权
管理员
密码允许管理员覆盖为任何单个页面或组设置的密码。
默认情况下,PmWiki具有以下密码设置:
- 这个
管理员
和上传
默认情况下,密码是锁定的。 - 这个
主要
和私人维基
组已锁定属性
密码(在各自的`组属性
第页)。 - 中的页面
现场
组除外`现场。提要栏
被锁定禁止编辑;默认情况下现场。提要栏
页面需要管理员或站点范围的编辑密码。
安管理员
密码可以用来克服“锁定”密码,除此之外,任何密码都不允许访问。
请参见密码有关设置每个页面和每个组密码的信息。本页的其余部分介绍如何从本地/config.php
文件。
设置站点范围的密码
管理员首先应该做的事情之一是设置管理员
站点的密码。这是通过如下行完成的本地/config.php
文件:
请注意pm密码()
为此需要调用——PmWiki将所有密码作为加密字符串在内部存储和处理。请参阅地下室剖面有关从配置文件中删除明文密码的详细信息,请参见下文。
要将整个站点设置为只有知道“编辑”密码的人才能编辑,请在下面添加一行本地/config.php
:
类似地,您可以为任何可用操作,通过$DefaultPasswords['read']
,$DefaultPasswords[编辑]
、和$DefaultPasswords[“上传”]
控制默认值阅读
,编辑
、和上传
整个站点的密码。默认密码用于未设置密码的页面和组,并用作已设置密码的页和组的附加密码。此外,每个$DefaultPasswords(默认密码)
值可以是加密密码的数组:
这意味着“alpha”或“beta”都可以用来阅读页面,但只有“beta“密码才允许用户编辑页面。由于PmWiki会记住当前会话中输入的任何密码,因此“beta”密码将允许读取和写入页面,而“alpha”密码只允许读取。没有这两个密码的人根本无法查看页面。
要锁定操作,以便只有管理员才能执行,请使用'@lock'(锁定)
作为值,没有pmcrypt()
:
通过引用设置密码
这是一个意外的功能。
通过引用设置密码,您可以像更改站点范围的密码一样轻松地更改整个页面的密码。(否则,您必须单独更新每个页面的属性。)输入页面属性或组属性:
@_站点_我的级别2
在本地配置文件中,使用如下行设置实际密码:
$Default密码
['MyLevel2']=数组(pmcrypt('secret'),'@admins');
请注意,当前在配置文件中通过引用设置的密码不能用作站点范围的默认密码。然而,您可以在组级别为每个组显式指定@_site_level,以实现相同的效果。一旦指定为组属性,该密码将应用于组中的所有页面,除非被覆盖,就像任何其他密码一样。
基于身份的授权(用户名/密码登录,授权用户)
与许多具有基于身份控制页面访问的系统(例如,使用单独的用户名和密码对于每个人),PmWiki默认为基于密码如上所述的系统。通常,基于密码的系统更容易维护,因为它们避免了创建用户帐户、恢复丢失的密码以及将用户名映射到允许的操作等管理开销。
然而,PmWiki的认证用户.php
该脚本增强了基于密码的系统,允许基于用户名和密码组合访问页面。请参见授权用户有关基于用户身份控制页面访问的更多详细信息,请参阅。
安全漏洞。。。
管理员需要仔细规划密码的应用位置,以避免无意中打开安全漏洞。如果你的维基是开放的(任何人都可以阅读和编辑),这似乎不是问题,除了,恶意或混淆的用户可能会将读取密码应用于组,并使该组对所有其他用户完全不可用。至少,即使是一个开放的wiki也应该在中设置一个站点范围的“admin”密码和一个站点范围的“attr”密码配置.php
. The示例配置.php
与PmWiki一起分发的文件表明,默认情况下,PmWikiandMain组已锁定“attr”,但如果有人创建了新组,则会解除锁定“atrr”。在这种情况下,管理员必须记住为每个新组设置“attr”密码(如果需要)。一个简单的解决方案是将这些行包含在配置.php
:
$DefaultPasswords['admin']=pmcrypt('youradminpassword');$DefaultPasswords['attr']=pmcrypt('yourattrpassword');
在中加密密码配置.php
使用pmcrypt()
直接在中设置密码配置.php
任何能够查看该文件的人都将看到未加密的密码。例如,如果配置.php
包含
然后,“mysecret”密码是纯文本的,以供其他人查看。然而,wiki管理员可以通过使用?action=地下室
在目标wiki上的任何PmWiki url上(或直接跳到密码管理员?action=地下室在你自己的维基上)。此操作显示一个表单,该表单生成加密版本的密码,以便在配置.php
文件。例如,当?action=地下室
被授予密码“我的秘密
“,PmWiki将返回如下字符串
$1$hMMhCdfT$mZSCh。BJOidMRn4SOUUSi1公司
从返回的字符串?action=地下室
然后可以直接放在config.php中,如下所示:
请注意,在加密形式中pm密码函数和括号被删除,因为密码已经加密。此外,加密密码必须用单引号括起来。在本例中,密码仍然是“我的秘密
“,但有人在看配置.php
仅仅通过查看加密的表单就无法看到这一点。?action=地下室
可能会为同一密码提供不同的加密——这是正常的(并且使其他人更难确定原始密码)。
请注意,应使用创建加密密码?action=地下室
在将使用它的wiki上。在一个系统上加密的密码可能在另一个系统中可用,也可能不可用。
正在删除密码
要完全删除网站密码,例如上传时的默认锁定密码,只需将其设置为空:
您还可以通过使用特殊密码“@nopass”?action=属性
在密码保护组中拥有非密码保护页面,或者在设置了站点范围默认密码的非密码保护组内拥有非密码。
撤消或使密码无效
如果密码被泄露,而wiki管理员希望快速使该密码在站点上的所有使用无效,则可以使用以下快速解决方案本地/config.php
:
$ForbiddenPasswords=数组('secret','tanstaafl');if(in_array(@$_POST['authpw'],$ForbiddenPasswords))取消设置($_POST['authpw']);
这就阻止了“秘密”和“坦斯塔夫”被接受为有效的授权密码,无论是什么页面使用它。
另请参阅
保护措施(示例)
每个行动可以使用密码保护。为脚本提供自己操作的Cookbook作者也可以使用此功能,但我将示例限制为(默认情况下)不受保护?action=源
。此操作显示实际页面的wikisource。有时你不想这样食谱:保护电子邮件或者在使用条件标记不应轻易发现,也不应仅由允许编辑页面的人员发现。
有几种解决方案:
- 将“源代码”限制为仅限于编辑器将以下内容添加到您的
本地/config.php
:$HandleAuth['source']='edit';
- 对于使用带有自己密码的“source”,请添加:
$HandleAuth['source']='source';
$DefaultPasswords['source']=pmcrypt('secret');
#参见上文
如果您还想在属性页面中设置密码,请添加:
$PageAttributes['passwdsource']=“$['Set new source password']”;
通常,将前缀“passwd”添加到$页面属性
数组表示您希望在将给定字段保存到磁盘时对其进行加密。
为“diff”等操作添加新密码处理的完整步骤如下:
#向attr页面添加一个新的(加密的)字段$PageAttributes['passwddiff']=“$[设置新历史密码:]”;#清除“diff”的默认密码$DefaultPasswords['diff']='';#告诉PmWiki,'diff'密码允许操作'diff''。$HandleAuth['diff']='diff';#告诉PmWiki“读取”密码#(或可选的“编辑”)密码#也足以启用“diff”。#当然,“admin”密码也可以。$AuthCascade['diff']='read';##或“编辑”
常见问题
似乎有一个默认密码。这是怎么一回事?
在您设置密码之前,没有任何有效的密码。密码管理员描述如何设置一个。
PmWiki“开箱即用”$DefaultPasswords(默认密码)
[管理]
设置为“*”。这并不意味着密码是星号,而是意味着默认的管理员密码必须加密为星号。因为这对pmcrypt()
函数返回一个1个字符的加密值,管理员密码将被有效锁定,直到管理员在配置.php
.
如何使用密码格式的文件(如.htpasswd)进行身份验证?
请参见授权用户,食谱:HtpasswdForm或厨师
ok:UserAuth2。
有什么我可以输入的吗组属性
字段显示“与管理员密码相同”?如果没有,有什么我可以放进配置.php
文件具有相同的效果?
在中输入“@lock”组属性?动作=属性
需要该组的管理员密码。
我如何编辑保护,例如所有RecentChanges页面?
看见安全#wikivandalism.
如何读取密码保护组中除主页
使用配置文件?
如中所述PmWiki。组自定义设置per-group或per-page配置文件不应用于定义密码。原因是每个组(或每个页面)的自定义文件仅为当前页面加载。所以,如果$DefaultPasswords['read']
在中设置本地/GroupA.php
,然后有人可以使用其他组中的页面来查看GroupA中页面的内容。例如,主要。Wiki沙盒
可能包含:
(:包括GroupA。SomePage:)
因为组A.php
文件未加载(我们正在查看主要。Wiki沙盒
-->本地/主电源.php
),没有设置读取密码。
如何使用密码保护新页面的创建?
请参见食谱:LimitWikiGroups,食谱:NewGroupWarning,食谱:限制新页面浏览群组.
如何更改密码提示屏幕?
如果您的问题是关于如何更改该页面。。。编辑现场。授权表单。如果您的问题是如何在提示输入密码时更改发送到的页面,您可以查看食谱:自定义AuthForm寻求帮助。
如何更改属性上的提示(?action=属性
)屏幕?
只需在以下位置创建新页面现场。属性窗体,并将以下代码行添加到配置.php
:
$PageAttrFmt='页面:站点。收件人表格';
请注意,这只会更改属性页面上密码输入上方的文本,但不会更改输入本身-输入必须单独处理。请参见食谱:CustomAttrForm了解更多信息。
当我尝试登录时,收到http错误500“内部服务器错误”。怎么了?
如果未在托管PmWiki的web服务器上创建加密密码,则可能会发生这种情况。
在PHP开发期间,crypt函数发生了更改,例如,用PHP 5.2加密的密码在PHP 5.1中无法解密,但PHP 5.2可以解密PHP 5.1创建的密码。
如果您使用最新的PHP版本在本地计算机上准备所有内容,并将密码上传到运行较旧版本的Web服务器,则通常会发生这种情况。
将加密密码添加到本地/config.php
.
解决方案:使用最旧的PHP版本在系统上创建密码,并在所有其他系统上使用。
我只希望用户必须创建一个“编辑”密码,该密码会自动用于“上传”和“属性”密码(无需单独设置)。我该怎么做?
通过设置$句柄授权
如此:
$HandleAuth['upload']='编辑';//为了防止WikiSandbox更改其“属性”权限//管理员除外(但允许编辑在自己的页面/组中进行更改)if(($group==“Site”)||($group==“Main”)|/($group=“Category”)| |($group==“SiteAdmin”)||($group==“PmWiki”){$HandleAuth['attr']='admin';//对于所有主管理页面,将“attr”设置为“admin”密码}其他{$HandleAuth['attr']='编辑';//如果可以编辑,则可以设置attr}