Jump to content

手册:阻止访问

From mediawiki.org
This page is a translated version of the page Manual:Preventing access and the translation is 96% complete.
Outdated translations are marked like this.

有关自定义用户权限的帮助,请参阅手册:用户权限 。 此页面包含用于限制访问的示例。

有关如何编辑 LocalSettings.php 的信息,请查看 Manual:LocalSettings.php

简单的私人维基

对于“自己和批准他人的私人维基”的常见用例,您需要:

警告 警告: 请参阅以下部分中的忠告;这是简单的“一般用途”代码,可能符合您的要求,也可能不符合您的要求。
# 阻止匿名用户阅读页面
$wgGroupPermissions['*']['read'] = false;

# 禁用匿名编辑
$wgGroupPermissions['*']['edit'] = false;

# 阻止管理员外其他人注册新用户
$wgGroupPermissions['*']['createaccount'] = false;

根据您安装的扩展程序,您可能希望将更多页面列入白名单。 例如,如果您使用Extension:ConfirmAccount 扩展,则可能需要将Special:RequestAccount列入白名单。 如果您的维基的内容语言不是英语,则可能必须使用相关特殊页面的翻译名称。

限制账户创建

要限制帐户创建,您需要在MediaWiki安装的根路径中编辑LocalSettings.php

# 阻止管理员外其他人注册新用户
$wgGroupPermissions['*']['createaccount'] = false;
如果要设置帐户确认队列,可以使用ConfirmAccount 扩展。 (如果没有,您仍可按以下步骤操作。)
新用户仍然可以通过以下方式由管理员创建:
  1. 当以管理员身份登录时,前往Special:Userlogin
  2. 点击“创建帐户”链接以转到帐户创建表单。
  3. 输入用户名和电子邮件地址,然后单击“通过电子邮件”按钮。 请注意,您需要$wgEnableEmail=true ,否则系统管理员必须输入一个密码并将其发送给用户。
  4. 该帐户将使用随机密码创建,然后通过电子邮件发送到指定地址(与“忘记密码”功能一样)。 首次登录时,将要求用户更改密码;当他这样做时,他的电子邮件地址也将被标记为已确认。
    当您单击“创建帐户”按钮时,您必须手动向用户发送其密码。

您还可以通过编辑页面MediaWiki:Createaccount-text来修改发送给新用户的电子邮件的内容。

防止管理员创建帐户:

# 阻止任何人注册新用户
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['sysop']['createaccount'] = false;

要在登录表单上添加消息,请修改MediaWiki:Loginprompt

限制编辑

限制所有页面的编辑

用户仍然可以阅读具有这些修改的页面,并且可以使用Special:Export/Article name或其他方法查看源代码。 参见bug 1859

参见Help:User rights 手册:$wgGroupPermissions 。 如果您使用Extension:AbuseFilter ,任何维基管理员也可以实施各种限制。

有关如何保护所有页面免受特定类别用户编辑(而非查看)的一些示例:

限制匿名用户编辑

要求用户在编辑之前进行注册。

$wgGroupPermissions['*']['edit'] = false;

限制所有非管理员用户编辑

要求一个用户是管理员(sysop)用户组的成员。

$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['sysop']['edit'] = true;

限制所有人的编辑

$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['sysop']['edit'] = false;

限制一整个名字空间的编辑

MediaWiki版本:
1.10

从MediaWiki版本1.10开始,可以使用$wgNamespaceProtection 变量保护整个名字空间。 示例:

# 仅允许自动确认用户编辑Project命名空间
$wgNamespaceProtection[NS_PROJECT] = array( 'autoconfirmed' );

# Don't allow anyone to edit non-talk pages until they've confirmed their
# email address (assuming we have no custom namespaces and allow edits
# from non-emailconfirmed users to start with)
# Note for 1.13: emailconfirmed group and right were removed from default
# setup, if you want to use it, you'll have to re-enable it manually
$wgNamespaceProtection[NS_MAIN]     = $wgNamespaceProtection[NS_USER]  =
$wgNamespaceProtection[NS_PROJECT]  = $wgNamespaceProtection[NS_IMAGE] =
$wgNamespaceProtection[NS_TEMPLATE] = $wgNamespaceProtection[NS_HELP]  =
$wgNamespaceProtection[NS_CATEGORY] = array( 'emailconfirmed' );

# 仅允许管理员编辑“Policy”命名空间
$wgGroupPermissions['sysop']['editpolicy'] = true;
$wgNamespaceProtection[NS_POLICY] = array( 'editpolicy' );

请注意,在最后一种情况下,假设存在自定义命名空间,NS_POLICY是一个等于命名空间编号的已定义常量。 有关MediaWiki核心命名空间的列表,请参见手册:使用自定义命名空间 Manual:命名空间常量

限制某些特定页面的编辑

使用保护 功能。 默认情况下,任何管理员都可以保护页面,因此只有其他管理员可以编辑它们。 在1.9及更高版本中,默认情况下它们也可以保护页面,因此只有“自动确认”的用户(帐户时间超过配置的时间段)才能对其进行编辑。 这不需要编辑配置文件。

如果要将编辑限制为具有特定权限的组,请编辑$wgRestrictionLevels 。 要防止编辑和移动以外的操作,请使用$wgRestrictionTypes

限制所有页面的编辑

要对所有页面的编辑施加全面限制,但允许一些(例如沙箱,加入请求页面等)可编辑,您可以使用EditSubpages 扩展。 这可能不太常见,但您也可以使用上面提到的限制编辑某些特定页面方法,所有名称空间都受到保护,并且每个人都可以编辑一个特殊的文件,其中包含您想要的所有页面编辑。

限制某些IP地址范围的编辑

学校和其他机构可能希望阻止指定的IP地址范围以外的编辑。 为此,请参阅手册:封禁与解除封禁 。 目前执行此操作的唯一方法而不修改代码是为了Special:Blockip并系统地rangeblock 每个你不想要的地址范围能够编辑。 这适用于所有未来版本的MediaWiki。 它不会在每个名字空间的基础上工作。

限制特定用户的编辑

使用用户封禁 功能剥夺用户的所有编辑权限。 MediaWiki并不能直接向单独用户授予权利;相反,权限始终给予用户组。 除了更改用户组之外,核心软件无法更改特定用户的权限以限制或允许编辑特定页面。

限制所有页面的创建

撤消“编辑”权限已阻止受影响的用户创建新页面和讨论页面。
# 匿名用户不能创建页面
$wgGroupPermissions['*']['createpage'] = false;

# 持有四天或四天以上账户的用户才能创建页面
# 需要MW 1.6或更高。
$wgGroupPermissions['*'            ]['createpage'] = false;
$wgGroupPermissions['user'         ]['createpage'] = false;
$wgGroupPermissions['autoconfirmed']['createpage'] = true;

限制在某些名字空间中创建页面

创建讨论页面(createtalk)和创建非讨论页面(createpage)有单独的权利。 如果您需要更精细的每命名空间控件,则无法在核心MediaWiki中使用,并且需要扩展名,例如扩展:Lockdown

限制对上传文件的访问权限

Manual:Image authorization , img_auth.php , 手册:User rights (read)

如果您已启用上传文件的功能,则这些文件将由底层Web服务器直接提供。 因此,基于帐户的文件访问权限默认情况下不受限制

警告 警告: 設定使用者權限「read」(允許瀏覽頁面)為false時僅會保護「維基(條目、討論……)頁面」,但上傳檔案(在$wgUploadPath 目錄中的圖片、檔案、文件……)將預設永遠保持在直接存取可讀的情況
當您需要限制圖片瀏覽和檔案下載僅供登入使用者可存取時,請使用Manual:Image authorization img_auth.php 頁面上的資訊。

服务器配置中上传文件的访问限制示例

如果将敏感文件上传到可通过互联网访问的维基,您可能希望添加对访问这些文件的限制。 在Apache上,如果您的本地网络是10.1.2.*,则可以使用以下命令将服务文件限制为本地地址:

  <Location /mediawiki/images>
    Order deny,allow
    Allow from 10.1.2.3
    Deny from all
  </Location>

限制查看

限制所有页面的查看

警告 警告: 如果您希望匿名用户无法查看wiki标记/代码,则不应允许他们编辑任何页面(参见上面的#Restrict编辑所有页面。 如果他们可以编辑任何页面,他们可以使用模板包含 来查看他们无法编辑的页面。 这可能能使用$wgNonincludableNamespaces 来避免
警告 警告: 此方法允许任何访问者在创建帐户后查看Wiki。 您可能希望将其与上面的#限制帐户创建结合使用。
警告 警告: 对于知道图像目录名称的任何人,仍然可以查看上传的图像。 将$wgUploadPath 指向img_auth.php脚本并按照Manual:Image authorization 中的说明操作,或使用一些外部方法来保护图像,例如.htaccess。
警告 警告: MediaWiki:Common.cssMediaWiki:Gadget-foo.css等Wiki頁面可能是公共ResourceLoader模塊的一部分,因此可以通過load.php公開其源代碼。關閉$wgUseSiteJs $wgUseSiteCss 以禁用此功能。
如果匿名用户无法查看您的页面,则搜索引擎也无法查看。 您的网站将不会被Google索引。

将这一行添加到你的LocalSettings.php中:

# 阻止匿名用户阅读页面
$wgGroupPermissions['*']['read'] = false;

# 但允许他们阅读下列页面:
$wgWhitelistRead = [ "Main Page", "Help:Contents" ];

$wgWhitelistRead 设置允许用户查看主页面。 如果页面名称包含多个单词,则在它们之间使用空格“ ”,而不是下划线“_”。

除了这样一个私有站点的主页之外,您还可以通过将Special:Recentchanges添加到$wgWhitelistRead 来为Feed阅读器提供对最近更改页面的访问权限(如果您认为其内容不是私有的)。

如果您因任何原因需要保护侧栏,主页或登录屏幕,建议您使用更高级别的身份验证,例如.htpasswd或同等身份。

警告 警告: 从1.32至1.35.4、1.36.2及1.37.0的MediaWiki版本包含安全漏洞,能允许绕过权限限制编辑任意页面和执行任意代码。 如果您正在使用这些版本但无法更新至新版本,请参见2021-12安全发布/常见问题解答 以获取解决方案。
虽然Special:Listusers将无法使用,但可以确定用户登录错误中的用户名是否正确。 您可能想要讓MediaWiki:wrongpasswordMediaWiki:nosuchusershort為相同文字。

限制特定页面的查看

为了防止除管理员之外的任何人查看页面,它可以被删除 。 为了防止管理员查看它,可以使用手册:修订版本删除 永久删除它。 要完全销毁页面文本,可以手动从数据库中删除它。 在任何情况下,在此状态下都无法编辑页面,并且大多数情况下不再存在。

让一个页面对一些用户正常行为但对其他用户不可见,例如在大多数论坛软件中,这是一个非常不同的事情。 MediaWiki专为两种基本访问模式而设计:

  1. 每个人都可以查看wiki上的每个页面(可能除了一些特殊页面)。 这是维基百科及其姊妹项目使用的模式。
  2. 匿名用户只能查看主页和登录页面,不能编辑任何页面。 这在技术实现方面基本上与上述相同(只是对每个页面视图进行额外检查),这就是它存在的原因。 这是某些私人维基使用的操作模式,例如各种维基媒体委员会使用的维基。

如果您打算拥有不同的视图权限,则MediaWiki不适合您的使用。 (参见T3924。) 数据库不一定通过命名空间,页面名称或其他标准明确描述,如果您想要这样做,则必须插入大量泄漏(请参阅样本的security issues with authorization extensions )。 其他wiki软件可能更符合您的目的。 以上是对您的忠告。 如果必须使用MediaWiki,则有三种基本可能性:

  1. 将您的wiki设置为私有和白名单特定页面,这些页面将在LocalSetting.php文件中以$wgWhitelistRead 公开。 请参阅上面的章节。
  2. 使用共享用户数据库 设置单独的wiki,将一个配置为可查看,一个配置为unviewable(见上),并在它们之间配置制造跨维基链接
  3. 安装第三方文件或扩展程序。 每次升级软件时都必须重新应用它,并且在发布MediaWiki的新安全修复程序或升级时可能不会立即更新。 当然,MediaWiki开发人员不支持第三方黑客攻击,如果您遇到问题,则不应该询问MediaWiki-l、#mediawiki或其他官方支持渠道。 一些黑客以Category:Page specific user rights extensions 列出。 如果您打算使用其中一个,请参阅security issues with authorization extensions

限制导出

参见: Manual:Parameters to Special:Export

无法导出自r19935起无法读取的页面内容。

移除账户

如果您想完全删除对用户的访问权限,例如 在简单的私人维基上,不可能简单地删除该帐户(除非没有编辑 ,你可以封禁 ,但用户仍然可以能够 来阅读页面。 但是,使用User Merge and Delete 扩展名,您可以将该帐户合并到另一个帐户中并删除前者,然后原始帐户将“消失”。 如果您想保留历史记录可读性(即,要让用户的编辑仍以他的名字显示),您可以创建一个新帐户,例如使用用户名Original User Name (deactivated)然后将Original User Name合并到前者中,或者甚至使用Renameuser 扩展名将Original User Name重命名为Another User Name,然后在Original User Name下创建一个帐户并将Another User Name合并到其中,这样,Original User Name将被完全“篡改”(如果您设置了非空密码)。

其他限制

您可能希望页面仅由其创建者编辑,或禁止查看历史记录或任何其他任何内容。 MediaWiki的未经修改版本中这些功能不可用。 如果您需要更细粒度的权限,请参阅参见部分以获取为此设计的其他wiki包的链接,以及试图将MediaWiki转换为其未设计的内容的黑客攻击,无论如何可能会工作。

参见

有一些您可能感兴趣的相关手册/帮助页面:

其他维基软件可能比MediaWiki更好地支持细粒度的访问控制:

如果您想要更好的访问控制但想要使用MediaWiki,这是一个扩展列表,并且允许在软件中实现不可能的限制。 其中的修改可能已经过时(请查看他们的版本)。 如果经过第三方修改的文件出现问题,请不要在官方MediaWiki支持渠道中询问。