手册:阻止访问

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Preventing access and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎dansk • ‎español • ‎français • ‎čeština • ‎українська • ‎中文 • ‎日本語

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

大多数示例需要更改MediaWiki配置文件LocalSettings.php 。 必须将没有附带说明的代码片段添加到LocalSettings.php才能生效。 要向文件添加一行或多行,请按照下列步骤操作:

  1. 如果文件末尾有?>,请将其移除。 这是不必要的,而且在某些情况下可能会导致问题。
  2. 使用文本编辑器将这行添加到文件的末尾。 如果在添加的内容上方或下方有一些空白行,则无关紧要。 不要使用Windows记事本,它可能会添加“字节顺序标记”(BOM)并阻止正确读取文件。 BOM的典型症状包括白页和已发送标头的错误。 要删除BOM,您必须在十六进制编辑器中编辑文件。 Windows写字板似乎工作正常,Notepad ++也是如此。 也可以使用Vim文本编辑器删除BOM,方法是在Vim中打开文件,输入:set nobomb,然后重新保存文件。 如果您使用的是Mac,TextEdit也可以完成这项工作。

有关编辑LocalSettings.php的更多详细信息,请参阅手册:LocalSettings.php

简单的私人维基

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

警告 警告: 请参阅以下部分中的忠告;这是简单的“一般用途”代码,可能符合您的要求,也可能不符合您的要求。
# Disable reading by anonymous users
$wgGroupPermissions['*']['read'] = false;

# Disable anonymous editing
$wgGroupPermissions['*']['edit'] = false;

# Prevent new user registrations except by sysops
$wgGroupPermissions['*']['createaccount'] = false;

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

限制账户创建

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

# Prevent new user registrations except by sysops
$wgGroupPermissions['*']['createaccount'] = false;
如果要设置帐户确认队列,可以使用帐户确认扩展。 (如果没有,您仍可按以下步骤操作。)
新用户仍然可以通过以下方式由管理员创建:
  1. 当以管理员身份登录时,前往Special:Userlogin
  2. 点击“创建帐户”链接以转到帐户创建表单。
  3. 输入用户名和电子邮件地址,然后单击“通过电子邮件”按钮。 请注意,您需要$wgEnableEmail=true ,否则系统管理员必须输入一个密码并将其发送给用户。
  4. 该帐户将使用随机密码创建,然后通过电子邮件发送到指定地址(与“忘记密码”功能一样)。 首次登录时,将要求用户更改密码;当他这样做时,他的电子邮件地址也将被标记为已确认。
    当您单击“创建帐户”按钮时,您必须手动向用户发送其密码。 如果您设置了$wgMinimalPasswordLength=0 (默认配置最高版本为1.15)并且您将密码字段留空,则会通过电子邮件向用户发送电子邮件地址确认请求,但无法访问Special:Confirmemail 来执行确认。 相反,用户将收到错误(除非您已将其添加到$wgWhitelistRead ),用户将能够使用空白密码登录然后确认电子邮件,但他们的密码将不会被重置(必须手动重置))。

编辑非用户尝试登录时显示的文本可能是适当的。 以管理员身份登录时,可以在MediaWiki:Nosuchuser完成此操作。 使用纯文本而不使用任何特殊格式,因为忽略格式并且文本是字面呈现的。 (可能已经改变,见bug 12952)。

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

防止管理员创建帐户:

# Prevent new user registrations by anyone
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['sysop']['createaccount'] = false;

要在登录表单上添加消息,请修改MediaWiki:Loginprompt。 或者,在LocalSettings.php中使用此代码:

function efLoginFormMessage( &$template ) {
	$template->set( 'header', "(For an account to edit articles with, contact Mrs. Nurdsbaum in room B-303, nelda.nurdsbaum@example.org )");
	return true;
}
$wgHooks['UserLoginForm'][]='efLoginFormMessage';

限制编辑

限制所有页面的编辑

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

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

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

限制匿名用户编辑

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

$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 变量保护整个名字空间。 示例:

# Only allow autoconfirmed users to edit Project namespace
$wgNamespaceProtection[NS_PROJECT] = array( 'autoconfirmed' );

# Don't allow anyone to edit non-talk pages until they've confirmed their
# e-mail 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' );

# Only allow sysops to edit "Policy" namespace
$wgGroupPermissions['sysop']['editpolicy'] = true;
$wgNamespaceProtection[NS_POLICY] = array( 'editpolicy' );

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

限制某些特定页面的编辑

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

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

限制所有页面的编辑

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

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

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

限制特定用户的编辑

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

限制所有页面的创建

撤消“编辑”权限已阻止受影响的用户创建新页面和讨论页面。
# Anonymous users can't create pages
$wgGroupPermissions['*']['createpage'] = false;

# Only users with accounts four days old or older can create pages
# Requires MW 1.6 or higher.
$wgGroupPermissions['*'            ]['createpage'] = false;
$wgGroupPermissions['user'         ]['createpage'] = false;
$wgGroupPermissions['autoconfirmed']['createpage'] = true;

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

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

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

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

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

警告 警告: Setting the user right "read" (allow viewing pages) to false will only protect wiki (article, talk, ...) pages, but uploaded files (images, files, docs... in the $wgUploadPath subdirectories) will always remain readable via direct access by default.
Use the information from Manual:Image Authorisation and img_auth.php pages when you have the need to restrict image views and file download access to only logged-in users.

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

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

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

限制查看

限制所有页面的查看

警告 警告: 如果您希望匿名用户无法查看wiki标记/代码,则不应允许他们编辑任何页面(参见上面的#Restrict编辑所有页面。 如果他们可以编辑任何页面,他们可以使用模板包含 来查看他们无法编辑的页面。 这可能是通过使用$wgNonincludableNamespaces (或使用NonincludableNamespaces 扩展的早期版本)来避免在1.10中,但这可能没有经过广泛测试
警告 警告: 此方法允许任何访问者在创建帐户后查看Wiki。 您可能希望将其与上面的#限制帐户创建结合使用。
警告 警告: 对于知道图像目录名称的任何人,仍然可以查看上传的图像。 将$wgUploadPath 指向img_auth.php脚本并按照手册:图片授权 中的说明操作,或使用一些外部方法来保护图像,例如.htaccess。
如果匿名用户无法查看您的页面,则搜索引擎也无法查看。 您的网站将不会被Google索引。

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

# Disable reading by anonymous users
$wgGroupPermissions['*']['read'] = false;

# But allow them to read e.g., these pages:
$wgWhitelistRead =  [ "Main Page", "Help:Contents" ];

# Allow Jobs to be run
$wgWhitelistRead = [ "Special:RunJobs" ];

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

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

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

虽然Special:Listusers将无法使用,但可以确定用户登录错误中的用户名是否正确。 您可能想要提供MediaWiki:wrongpasswordMediaWiki:nosuchusershort的通用文本。

限制特定页面的查看

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

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

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

如果您打算拥有不同的视图权限,则MediaWiki不适合您的使用。 (参见bug 1924。) 数据库不一定通过命名空间,页面名称或其他标准明确描述,如果您想要这样做,则必须插入大量泄漏(请参阅样本的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起无法读取的页面内容。

从所有页面移除登录链接

可以从所有页面的右上角删除登录/创建帐户链接, 因为用户仍然可以登录Special:SpecialPages>Special:UserLogin。 在LocalSettings.php中使用(使用MediaWiki 1.16测试)

function NoLoginLinkOnMainPage( &$personal_urls ){
    unset( $personal_urls['login'] );
    unset( $personal_urls['anonlogin'] );
    return true;
}
$wgHooks['PersonalUrls'][]='NoLoginLinkOnMainPage';

移除账户

如果您想完全删除对用户的访问权限,例如 在简单的私人维基上,不可能简单地删除该帐户(除非没有编辑 ,你可以封禁 ,但用户仍然可以能够 来阅读页面。 但是,使用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 1.16.0开始,可以将$wgBlockDisablesLogin 设置为true以防止访问和读取被阻止的用户。

其他限制

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

参见

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

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

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