Extension:AbuseFilter
AbuseFilter 发行状态: 稳定版 |
|
---|---|
实现 | 用户活动 , 特殊页面 , API |
描述 | 允许特定基于行为的限制应用于wiki活动中。 |
作者 |
|
兼容性政策 | 快照跟随MediaWiki发布。 master分支不向后兼容。 |
MediaWiki | >= 1.43.0 |
数据库更改 | 是 |
Composer | mediawiki/abuse-filter |
表 | abuse_filter abuse_filter_action abuse_filter_history abuse_filter_log |
许可协议 | GNU通用公眾授權條款2.0或更新版本 |
下載 | |
|
|
|
|
|
|
|
|
季度下載量 | 139 (Ranked 42nd) |
正在使用的公开wiki数 | 2,939 (Ranked 186th) |
前往translatewiki.net翻譯AbuseFilter扩展 | |
問題 | 开启的任务 · 报告错误 |
滥用过滤器(AbuseFilter)扩展允许具有权限的用户设置当用户的操作(例如编辑)匹配特定标准时,要进行的特定動作。
例如,可以创建一个过滤器防止匿名用户添加外部链接或封禁移除超过2000个字符的用户。
安裝
- 下载文件,并将解压后的
AbuseFilter
文件夹移动到extensions/
目录中。
开发者和代码贡献人员应从Git安装扩展,输入:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter - 只有從git安裝才运行Composer来安装PHP依赖,通过发行
composer install --no-dev
至扩展目录。 (参见工單T173141了解潜在问题。) - 将下列代码放置在您的LocalSettings.php 的底部:
wfLoadExtension( 'AbuseFilter' );
- 运行更新脚本,它将自动创建此扩展必须依赖的数据库表。
- 按需求配置。
- 完成 – 在您的wiki上导航至Special:Version,以验证已成功安装扩展。
因此,從 Git 安裝後,變更到包含擴充套件的目錄,例如:"../extensions/AbuseFilter/"並執行 composer install --no-dev
,或更新時:composer update --no-dev
。
另外,最好在 wiki 根目錄的 「composer.local.json」 檔案中加入 "extensions/AbuseFilter/composer.json"
這一行,例如
{
"extra": {
"merge-plugin": {
"include": [
"extensions/AbuseFilter/composer.json"
]
}
}
}
配置
用户权限
一旦您安装了此扩展,您将需要在"LocalSettings.php"设置用户权限。
权限 | 描述 | 备注 | 默认拥有此权限的用户组 |
---|---|---|---|
abusefilter-modify | 创建或修改滥用过滤器 | 需要abusefilter-view 权限
|
sysop |
abusefilter-view | 查看滥用过滤器 | * | |
abusefilter-log | 查看滥用日志 | * | |
abusefilter-log-detail | 查看详细滥用日志 | 需要abusefilter-log 权限
|
sysop |
abusefilter-privatedetails | 查看滥用日志中的非公开数据 | 1.34前此权限称为abusefilter-private - 需要abusefilter-log-detail 权限
|
— |
abusefilter-modify-restricted | 修改包含受限动作的滥用过滤器 | 需要abusefilter-modify 权限
|
sysop |
abusefilter-modify-global | 创建或修改全域滥用过滤器 | 需要abusefilter-modify 权限
|
— |
abusefilter-revert | 撤销指定滥用过滤器作出的所有更改 | sysop | |
abusefilter-view-private | 查看被标记为非公开的滥用过滤器 | 需要abusefilter-view 权限 (用户组已有abusefilter-modify 权限时不需要)
|
sysop |
abusefilter-log-private | 查看标记为非公开的滥用过滤器的过滤日志 | 需要abusefilter-log 权限 (用户组已有abusefilter-modify 或abusefilter-view-private 权限时不需要)
|
sysop |
abusefilter-hide-log | 将条目在滥用日志中隐藏 | 需要abusefilter-log 权限
|
suppress |
abusefilter-hidden-log | 查看隐藏的滥用日志条目 | 需要abusefilter-log 权限
|
suppress |
abusefilter-privatedetails-log | 查看滥用过滤器非公开详情访问日志 | 1.34前此权限称为abusefilter-private-log
|
— |
abusefilter-modify-blocked-external-domains | 创建或修改禁止被链接的外部域名 | sysop | |
abusefilter-bypass-blocked-external-domains | 绕过被屏蔽的外部域名 | 需要edit 权限
|
bot |
abusefilter-access-protected-vars | 查看和创建使用受保护变量的过滤器 | sysop | |
abusefilter-protected-vars-log | 查看关于访问受保护变量的日志 | sysop |
举个例子,如果按照以下配置的话,管理员能对滥用过滤器做任何设定,而任何人都能查看过滤日志和已公开的过滤器过滤代码:
$wgGroupPermissions['sysop']['abusefilter-modify'] = true;
$wgGroupPermissions['*']['abusefilter-log-detail'] = true;
$wgGroupPermissions['*']['abusefilter-view'] = true;
$wgGroupPermissions['*']['abusefilter-log'] = true;
$wgGroupPermissions['sysop']['abusefilter-privatedetails'] = true;
$wgGroupPermissions['sysop']['abusefilter-modify-restricted'] = true;
$wgGroupPermissions['sysop']['abusefilter-revert'] = true;
$wgGroupPermissions['sysop']['abusefilter-access-protected-vars'] = true;
$wgGroupPermissions['sysop']['abusefilter-protected-vars-log'] = true;
abusefilter-access-protected-vars
permission. Logs pertaining to these filters can only be viewed by users with the abusefilter-protected-vars-log
permission. For more information, see Rules format .
参数
值名 | 默认值 | 描述 |
---|---|---|
$wgAbuseFilterActions
|
[
'throttle' => true,
'warn' => true,
'disallow' => true,
'blockautopromote' => true,
'block' => true,
'rangeblock' => false,
'degroup' => false,
'tag' => true
]
|
滥用过滤器可以进行的動作。 當添加新動作時,確認是否在$wgAbuseFilterActionRestrictions 中被限制,若是的話,別忘了將abusefilter-modify-restricted 權限加入到適當的用戶組。
|
$wgAbuseFilterConditionLimit
|
1000
|
每次针对更改运行过滤器时可以使用的最大“条件”数。 (更复杂的过滤器需要更多'条件')。 |
$wgAbuseFilterValidGroups
|
[
'default'
]
|
“组”过滤器列表可以分为。默认情况下,只有一个组。 其他扩展可能会添加其他组。 |
$wgAbuseFilterEmergencyDisableThreshold
|
[
'default' => 0.05
]
|
如果匹配超过2次编辑,则禁用过滤器,构成在“观察”期间(最多一天)针对过滤器组检查的操作的5%以上,亦或是过去86400秒(一天)内更改了过滤器 。 請參閱緊急限制。 |
$wgAbuseFilterEmergencyDisableCount
|
[
'default' => 2
]
| |
$wgAbuseFilterEmergencyDisableAge
|
[
'default' => 86400
]
| |
$wgAbuseFilterActionRestrictions
|
[
"throttle" => false,
"warn" => false,
"disallow" => false,
"blockautopromote" => true,
"block" => true,
"rangeblock" => true,
"degroup" => true,
"tag" => false
]
|
用户必须具有“abusefilter-modify-restricted”用户权限以及“abusefilter-modify”才能创建或修改执行这些動作的过滤器。 |
$wgAbuseFilterNotifications
|
false
|
允许配置扩展以发送触发通知至Special:RecentChanges或UDP。 可用的设置: rc, udp, rcandudp
要将滥用过滤器的更改发送到 Special:RecentChanges,请使用
unset($wgLogRestrictions['abusefilter']); 。 |
$wgAbuseFilterNotificationsPrivate
|
false
|
允许私有过滤器使用通知功能。 |
$wgAbuseFilterCentralDB
|
null
|
MW 1.41+ 指定全域过滤器的数据库名 需要安装 CentralAuth,否则全局过滤器将在 wikifarm 上失效。 |
$wgAbuseFilterIsCentral
|
false
|
MW 1.41+ 如果wiki為全域过滤器所儲存的数据库時设定为true 需要安装 CentralAuth,否则全局过滤器将在 wikifarm 上失效。 |
$wgAbuseFilterLocallyDisabledGlobalActions
|
[
"throttle" => false,
"warn" => false,
"disallow" => false,
"blockautopromote" => false,
"block" => false,
"rangeblock" => false,
"degroup" => false,
"tag" => false
]
|
禁止中央过滤器执行此变量中设置为 true 的操作。 |
$wgAbuseFilterBlockDuration
|
'indefinite'
|
滥用过滤器做出的封禁持续时间。
从1.31.0-wmf.25开始,可以为每个过滤器指定封禁持续时间,并覆盖此变量。 此变量仅在启用封禁时使用,以便预先选择默认持续时间。
|
$wgAbuseFilterAnonBlockDuration
|
null
|
AbuseFilter对未登录的用户所做的封禁的持续时间。如果未设置,则将使用$wgAbuseFilterBlockDuration 的值。
从1.31.0-wmf.25开始,可以为每个过滤器指定封禁持续时间,并覆盖此变量。 此变量仅在启用封禁时使用,以便预先选择默认持续时间。
|
$wgAbuseFilterBlockAutopromoteDuration
|
5
|
过滤器阻止用户自动升级的持续时间(以天为单位)。 |
$wgAbuseFilterDefaultWarningMessage
|
[
'default' => 'abusefilter-warning'
]
|
每个过滤器组的默认警告信息 |
$wgAbuseFilterDefaultDisallowMessage
|
[
'default' => 'abusefilter-disallowed'
]
|
每个过滤器组的默认禁止消息 |
$wgAbuseFilterLogIP
|
true
|
是否在abuse_filter_log中包含IP |
$wgAbuseFilterLogIPMaxAge
|
3 * 30 * 24 * 3600
|
清除旧IP日志数据时使用的时长作为截止值。默认为3个月。由维护脚本purgeOldLogIPData.php使用。 |
$wgAbuseFilterProfileActionsCap
|
10000
|
确定何时重置分析统计信息的操作数。 |
$wgAbuseFilterLogPrivateDetailsAccess
|
false
|
是否能夠從被記錄的過濾器日誌項目中存取私人資訊。 |
$wgAbuseFilterPrivateDetailsForceReason
|
false
|
是否強制用戶透過過濾器日誌項目存取私人資訊時需要提供原因。 |
$wgAbuseFilterSlowFilterRuntimeLimit
|
500
|
过滤器被认为较慢之前的运行时间(以毫秒为单位)。 |
$wgAbuseFilterRangeBlockSize
|
[
'IPv4' => '16',
'IPv6' => '19',
]
|
'rangeblock' 操作封禁的范围的大小。 |
$wgAbuseFilterProtectedVariables
|
[ "user_unnamed_ip" ]
|
Array of variables that are be considered protected (limited access) and require the abusefilter-access-protected-vars right to use/view.
|
緊急限制
防濫用過濾器有個功能是能夠自動節流(停用)過濾器,當過濾器最近編輯過且符合最近操作的數量達到一定門檻時運作。
這麼做是為了防止對過濾器進行有害的編輯,而導致阻止所有用戶對Wiki進行操作。
停用過濾器的條件根據這些變數:
$wgAbuseFilterEmergencyDisableThreshold
- 觀測期間內匹配數在操作總數中的百分比。$wgAbuseFilterEmergencyDisableCount
- 觀察期間內過濾器的匹配數。$wgAbuseFilterEmergencyDisableAge
- 進行評估的過濾器年齡。如果過濾器的最後一次編輯時間早於該秒數,則不會對其進行限制,除非它已被限制。
被拦截过滤器的已启用, 高匹配率状态可以在的过滤器列表(Special:AbuseFilter)中查看。 拦截是无声的,我们没有办法看到过滤器何时被拦截。除非安裝了Extension:Echo ,然後通知最後修改篩選器的使用者。
当过滤器被拦截时,它不会执行任何危险的操作(通常限制為特殊權限才能使用的操作,例如封鎖使用者或從使用者群組中移除使用者,由$wgAbuseFilterActionRestrictions控制),并且只允许“安全”操作(可以警告或阻止嘗試的操作之類的)。 拦截过滤器不会自动启用。若要禁用拦截,则需要编辑过滤器设置。 请注意,您实际上需要更改过滤器:从过滤器的注释中更改内容就可以了。
请注意,编辑过滤器将会更新它的历史,如果它再次达到上次编辑后的短时间内被拦截的条件,则会导致它被禁用,如果您的wiki比合法的编辑有更多的滥用,则会导致无法使用的过滤器。
创建和管理过滤器
当安装好本插件,通过滥用管理器管理页Special:AbuseFilter查看过滤日志和创建、修改、测试、删除过滤器。
- 要从Wikipedia导入过滤器:您需要在安装扩展之后,转到w:Special:AbuseFilter,选择一个过滤器(例如w:Special:AbuseFilter/3),然后单击“导出此过滤器”,复制随后出现的文本,转到目标wiki上的“Special:AbuseFilter/import”,粘贴文本。
- m:Small wiki toolkits/Starter kit/AbuseFilter - Metawiki上針對小型Wiki的社區指南
API
滥用过滤器有两个API的list模块,一个用于获得过滤器列表(“abusefilters”),另一个用于获得过滤日志。过滤日志是独立于其他MediaWiki日志的(日志名为“abuselog”)。不能通过API创建或修改滥用过滤器。
list = abusefilters
列出关于过滤器的信息
- 参数
abfstartid
- 从该过滤器ID开始列举abfendid
- 列举到该过滤器ID为止abfdir
- 列举的方向(older、newer)abfshow
- 只显示符合对应属性的过滤器(enabled|!enabled|deleted|!deleted|private|!private)abflimit
- 每次列举最大数量abfprop
- 欲获取的属性(id|description|pattern|actions|hits|comments|lasteditor|lastedittime|status|private)
如果过滤器是非公开的且您没有查看它的权限,abfprop
中某些参数则不会显示。
- 例子
结果 |
---|
{
"batchcomplete": "",
"continue": {
"abfstartid": 18,
"continue": "-||"
},
"query": {
"abusefilters": [
{
"id": 1,
"hits": 41430
},
{
"id": 3,
"hits": 957485
},
{
"id": 5,
"hits": 5931
},
{
"id": 6,
"hits": 19
},
{
"id": 8,
"hits": 7
},
{
"id": 9,
"hits": 41354
},
{
"id": 11,
"hits": 132971
},
{
"id": 12,
"hits": 139693
},
{
"id": 14,
"hits": 63
},
{
"id": 15,
"hits": 15
}
]
}
}
|
list = abuselog
列出过滤器的触发日志。
- 参数
aflstart
- 从该时间戳开始列举aflend
- 列举到该时间戳为止afldir
- 列举的方向(older、newer)afluser
- 只显示该用户或IP地址触发过滤器的日志。afltitle
- 只显示该页面中触发过滤器的日志。aflfilter
- 只显示该过滤器ID的触发日志afllimit
- 每次列举最大数量aflprop
- 欲获取的属性: (ids|filter|user|ip|title|action|details|result|timestamp|hidden|revid|wiki)
- 示例
结果 |
---|
{
"batchcomplete": "",
"continue": {
"aflstart": "2018-03-06T02:34:18Z",
"continue": "-||"
},
"query": {
"abuselog": [
{
"id": 27219261,
"filter_id": "1073"
},
{
"id": 26938051,
"filter_id": ""
},
{
"id": 23388942,
"filter_id": "1"
},
{
"id": 22044912,
"filter_id": ""
},
{
"id": 22032235,
"filter_id": ""
},
{
"id": 22032196,
"filter_id": ""
},
{
"id": 21983882,
"filter_id": ""
},
{
"id": 20594818,
"filter_id": "904"
},
{
"id": 20593489,
"filter_id": "904"
},
{
"id": 20590442,
"filter_id": "904"
}
]
}
}
|
可能的错误
- 有些用户可能会遇到创建新的过滤器器或修改旧过滤器器失败了,随后用户被重定向到原始页面的情况。 如果Wiki使用的是SSL证书,则此错误可能是由于
$wgServer
的值,该值可能使用的是“http://”而不是“https://”。 对此错误的一个提示是,浏览器的Special:AbuseFilter标签页弹出https警告。(Topic:T23dyyih0ofjada5)
整合其他擴充功能
您可以通過多種方式將防濫用過濾器與其他擴展整合。
添加用於過濾的變數
可以添加新的变量用于滥用过滤器。示例列表可用 。要做到这一点,您应该:
- 为AbuseFilter-builder 钩子添加一个处理程序。 要添加变量,您应该使用
$builder['vars']['variable_name'] = 'i18n-key';
,其中variable_name
是变量的名称,i18n-key
是i18n秘钥的片段。 这整段秘钥应该是abusefilter-edit-builder-vars-{$your_key}
。 - 添加您在上一点选择的 i18n 消息。
- 選擇要計算變數的鉤子處理程式。根據您的使用情況,您可以:
- Implement the AbuseFilter-generateTitleVars hook; this is specifically thought for page-related variables;
- Implement the AbuseFilter-generateUserVars hook; this is specifically thought for user-related variables;
- Implement the AbuseFilter-generateGenericVars hook; this is for variables not bound to a specific page or user;
- Implement the AbuseFilterAlterVariables hook; this is a bit more flexible than the other hooks, but it has a downside: your variable will not be available when examining past RecentChanges entries. 如果您要實作該功能(建議您這樣做),您應該使用上面列出的其中一個鉤子,並使用它的第三個參數 (
$RCRow
)。
- Inside the hook handler, there are two ways to add a variable:
- The "direct" way is calling
$vars->setVar( 'var_name', var_value );
. This is ideal only when the value is easy and quick to compute: the value is computed even if no active filter will use it. - The "lazy" way is calling
$vars->setLazyLoadVar( 'var_name', 'method_name', $params );
. Here, 'method_name' is a (unique) identifier that will be used to compute the variable (it's recommended to prefix it with the name of your extension). To register the method, you should add a handler for the AbuseFilter-computeVariable hook; therein, you should check if the $method passed matches your 'method_name', and if so, compute the variable. Lastly, $params is an array of parameters that you'll need to compute the variable; these are passed to the computeVariable hook handler. For an example of this, you can check out CentralAuth'sglobal_user_groups
.
- The "direct" way is calling
新增自訂動作
您可以新增自訂動作處理程式,讓每個篩選器可以執行進一步的動作。 To do that, you choose a name for the action ('my-action' from now on), and then:
- Create a class named e.g. MyAction, that should extend \MediaWiki\Extension\AbuseFilter\Consequence, which can also implement HookAborterConsequence or ConsequencesDisablerConsequence
- 新增訂閱者到 AbuseFilterCustomActions 鈎結;訂閱者應該提供鈎結文件中記載的回呼,例如回傳上面建立的類別的實例:
class MyAction extends \MediaWiki\Extension\AbuseFilter\Consequence {
public function run() {
throw new \Exception( 'Write me' );
}
}
public function onAbuseFilterCustomActions( &$actions ) {
$actions[] = function ( \MediaWiki\Extension\AbuseFilter\Consequence\Parameters $params, array $rawParams ) : MyConsequence {
return new MyAction( $params, $rawParams );
};
}
Then you should add the following i18n messages; you can replace 'my_action' with e.g. 'block' to see what the messages are for:
'abusefilter-edit-action-${my_action}'
'abusefilter-action-${my_action}'
添加規則組
您也可以新增額外的規則群組,用來將現有的濫用篩選器分組。 Note that, at the moment, each filter can only be in a single group (T116642). Currently, the only known consumer of this feature is 扩展:结构式讨论 . 要做到這一點,您應該:
- Append the name of the group to
$wgAbuseFilterValidGroups
.
- 加入一些程式碼,讓您的群組執行過濾器。請注意 AbuseFilter 不會自己執行。要做到這一點,您應該建立一個
AbuseFilterRunner
物件,並傳入您的群組的名稱。
參見
- Help:BlockedExternalDomains
- 多个启用此擴展的WMF維基(以及使用的配置)
此扩展用于一个或多个维基媒体项目。 这可能意味着扩展足够稳定、运作足够良好,可以用在这样的高流量的网站上。 请在维基媒体的CommonSettings.php和InitialiseSettings.php配置文件中查找此扩展的名称以查看哪些网站安装了该扩展。 特定wiki上的已安装的扩展的完整列表位于Special:Version页面。 |
此扩展在以下wiki农场/托管网站和/或软件包中提供: 這不是一份權威名單。 即使某些wiki农场/托管网站和/或软件包未在这里列出,它们也可能提供此扩展。 请检查你的wiki农场/托管网站或软件包以确认提供情况。 |