Extension:AbuseFilter
AbuseFilter (不正利用フィルター) 拡張機能は、権限のある利用者が、利用者による編集などの操作が特定の条件に一致した場合に取るべき操作を設定できます。
例えば、未登録の利用者が外部リンクを追加できないようにしたり、2000文字以上の除去を行った利用者をブロックするフィルターを作成することができます。
インストール
- ダウンロードして、ファイルを
extensions/
フォルダー内のAbuseFilter
という名前のディレクトリ内に配置します。 - Gitでのインストールの場合のみ、PHPの依存関係をインストールするためComposerを実行します。 (合併症の可能性についてはタスク T173141を参照。)
- 以下のコードを LocalSettings.php ファイルの末尾に追加します:
wfLoadExtension( 'AbuseFilter' );
- 更新スクリプトを実行します。このスクリプトは、この拡張機能が必要とするデータベーステーブルを自動的に作成します。
- 必要に応じて設定します。
- 完了 – ウィキの「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"にユーザー権限を設定する必要があります。
権限 | 説明 | Notes | User groups that have this right by default |
---|---|---|---|
abusefilter-modify | 不正利用フィルターを作成/変更 | Requires the abusefilter-view right | sysop |
abusefilter-view | 不正利用フィルターを閲覧 | * | |
abusefilter-log | 不正利用記録を閲覧 | * | |
abusefilter-log-detail | 不正利用記録の詳細項目を閲覧 | Requires the abusefilter-log right | sysop |
abusefilter-privatedetails | 不正利用記録内の非公開データを閲覧 | Prior to 1.34 this right was named abusefilter-private - Requires the abusefilter-log-detail right | — |
abusefilter-modify-restricted | 制限された操作を含む不正利用フィルターを変更 | Requires the abusefilter-modify right | sysop |
abusefilter-modify-global | グローバル不正利用フィルターを作成/変更 | Requires the abusefilter-modify right | — |
abusefilter-revert | 指定した不正利用フィルターによるすべての変更を差し戻す | sysop | |
abusefilter-view-private | 非公開の不正利用フィルターを閲覧 | Requires the abusefilter-view right (not needed if the group already has the abusefilter-modify right) | sysop |
abusefilter-log-private | 非公開の不正利用フィルター記録を閲覧 | Requires the abusefilter-log right (not needed if the group already has the abusefilter-modify or abusefilter-view-private rights) | sysop |
abusefilter-hide-log | 不正利用記録の項目を隠す | Requires the abusefilter-log right | suppress |
abusefilter-hidden-log | 隠された不正利用記録を閲覧 | Requires the abusefilter-log right | suppress |
abusefilter-privatedetails-log | 不正利用フィルター非公開記録の調査記録を閲覧 | Prior to 1.34 this right was named abusefilter-private-log | — |
例えば、以下の設定例では、管理者にはAbuseFilterの全操作を、一般利用者には公開しているフィルターに限り設定、ログの閲覧を許可しています。
$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;
パラメーター
変数名 | 既定値 | 説明 |
---|---|---|
$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'
]
|
「グループ」フィルターの一覧を分割できます。既定ではグループは1件だけです。 他の拡張機能によってグループが追加されることがあります。 |
$wgAbuseFilterEmergencyDisableThreshold
|
[
'default' => 0.05
]
|
検出頻度の多いフィルターを無効にする設定。例えばこの標準設定の場合、フィルターが2回を超える編集にマッチし、最近の編集の5%を超えて構成され、かつ最後更新から86400秒(一日)以内に入って変更されていない場合、フィルターは無効になる。 緊急停止をご参照ください。 |
$wgAbuseFilterEmergencyDisableCount
|
[
'default' => 2
]
| |
$wgAbuseFilterEmergencyDisableAge
|
[
'default' => 86400
]
| |
$wgAbuseFilterParserClass
|
'AbuseFilterParser'
|
不正利用フィルターのパーサークラスの名前。 |
$wgAbuseFilterActionRestrictions
|
[
"throttle" => false,
"warn" => false,
"disallow" => false,
"blockautopromote" => true,
"block" => true,
"rangeblock" => true,
"degroup" => true,
"tag" => false
]
|
フィルターを作成する際、これらの対処発動を設定できるのは「abusefilter-modify」の他、「abusefilter-modify-restricted」権限を持っている利用者のみ。 |
$wgAbuseFilterNotifications
|
false
|
拡張機能がフィルター検出記録を Special:RecentChanges (最近の更新) や UDP に送信できるよう設定します。 オプションは、 rc, udp, rcandudp
For sending changes to abuse filters to Special:RecentChanges, use
unset($wgLogRestrictions['abusefilter']); . |
$wgAbuseFilterNotificationsPrivate
|
false
|
非公開フィルターの通知を有効にするかどうか。 |
$wgAbuseFilterCentralDB
|
null
|
グローバル不正利用フィルターが保存されるデータベースの名前 (対応は最新の開発版に限定)。 CentralAuthがインストールされている必要があります。そうしないと、グローバルフィルターがwikifarmで壊れてしまいます。 |
$wgAbuseFilterIsCentral
|
false
|
グローバルな不正利用フィルターが保存されるウィキに対してこの変数を true にセット(グローバルフィルターを利用している場合)。 CentralAuthがインストールされている必要があります。そうしないと、グローバルフィルターがwikifarmで壊れてしまいます。 |
$wgAbuseFilterLocallyDisabledGlobalActions
|
[
"throttle" => false,
"warn" => false,
"disallow" => false,
"blockautopromote" => false,
"block" => false,
"rangeblock" => false,
"degroup" => false,
"tag" => false
]
|
Centralised フィルターがこの変数に対して、真(true) の操作を設定できなくする。 |
$wgAbuseFilterBlockDuration
|
'indefinite'
|
不正利用フィルターによりブロックされた場合の持続期間。
バージョン 1.31.0-wmf.25 からはフィルタ毎に指定したブロック持続期間が優先適用されます。 この変数の利用は、あらかじめ設定した期間限定でブロックを発動する場合に限定されます。
|
$wgAbuseFilterAnonBlockDuration
|
null
|
簡単に言えば、 $wgAbuseFilterBlockDuration の匿名利用者版。これが設定されていない場合、 $wgAbuseFilterBlockDuration の値が優先される。
バージョン 1.31.0-wmf.25 からはフィルタ毎に指定したブロック持続期間が優先適用されます。 この変数の利用は、あらかじめ設定した期間限定でブロックを発動する場合に限定されます。
|
$wgAbuseFilterBlockAutopromoteDuration
|
5
|
利用者の自動昇格がフィルターによってブロックされる期間 (日数)。 |
$wgAbuseFilterCustomActionsHandlers
|
[]
|
カスタム操作のコールバック関数。 (1.36 で廃止予定) 代わりとしてAbuseFilterCustomActionsフックを使ってください。 |
$wgAbuseFilterDefaultWarningMessage
|
[
'default' => 'abusefilter-warning'
]
|
フィルター単位の既定の警告メッセージ群 |
$wgAbuseFilterDefaultDisallowMessage
|
[
'default' => 'abusefilter-disallowed'
]
|
フィルタグループごとのデフォルトの禁止メッセージ |
$wgAbuseFilterLogIPMaxAge
|
3 * 30 * 24 * 3600
|
IPアドレスログの保持期間。標準設定では3ヶ月(90日)となっている。メンテナンススクリプト「purgeOldLogIPData.php」がこの変数を利用する。 |
$wgAbuseFilterProfileActionsCap
|
10000
|
プロファイリング統計情報をリセットするタイミングを決定する操作の件数。 |
$wgAbuseFilterLogPrivateDetailsAccess
|
false
|
フィルターの記録項目からの個人情報へのアクセスを記録に格納するかどうか。 |
$wgAbuseFilterPrivateDetailsForceReason
|
false
|
フィルタのログ入力により、利用者が個人情報位入力を強制されたかどうか |
$wgAbuseFilterSlowFilterRuntimeLimit
|
500
|
フィルタが遅いと判断されるまでのランタイム(ミリ秒)。 |
$wgAbuseFilterRangeBlockSize
|
[
'IPv4' => '16',
'IPv6' => '19',
]
|
'rangeblock' 操作でブロックされた範囲のサイズ。 |
$wgAbuseFilterLogIP
|
true
|
IPをabuse_filter_logに含めるかどうか |
$wgAbuseFilterBlockedExternalDomainsNotifications
|
false
|
Feature flag to enable realtime notifications when an editor types a link to a blocked external domain. As of October 2023, this requires that $wgAbuseFilterEnableBlockedExternalDomain also be true . See Help:BlockedExternalDomains for more information.
|
緊急速度制限
不正利用フィルターには最近の編集および特定の閾値に該当する最新の操作を、自動的に速度を制限 (無効化) させる機能が付属します。
これはフィルターに有害な編集ができないように、ウィキなどで特定の操作をする全ての利用者をブロックする措置です。
フィルターを無効化する条件は以下の変数で制御します:
$wgAbuseFilterEmergencyDisableThreshold
- 観察期間の全ての操作に占める割合。$wgAbuseFilterEmergencyDisableCount
- 観察期間にフィルターが発動した件数。$wgAbuseFilterEmergencyDisableAge
- 考慮するフィルターの古さ。 フィルターの最後の編集がこの秒数より古い場合、すでに絞り込まれていない限り、フィルターは絞り込まれません。$wgAbuseFilterProfileActionsCap
- 閾値と対比させた最近の操作の最大件数。 各操作はカウンターを増加させ、カウンターが設定された値に達すると、カウンターとすべてのフィルターに一致する最近の操作のカウントが0にリセットされることに注意してください。
速度制限フィルターは、フィルターのリスト(Special:AbuseFilter)の状態 有効, 高い一致率で識別できます。 速度制限は密かに発動し、フィルターがいつ速度制限を発動したのか確認する方法はありません。
フィルターが速度制限を受けると、危険な操作 (通常、利用者をブロックしたり、グループから除去したりするような特別な権限に制限される操作で、$wgAbuseFilterActionRestrictions によって制御される) は行わず、「安全」な操作だけが許可されます (進行中の操作を警告したり防止したりすることができるものです)。 速度制限のフィルターは自動的は有効になりません。速度制限を無効にするにはフィルターを編集する必要があります。 フィルターに何らかの編集を加える必要があることに注意してください。フィルターのメモを変更するだけで十分です。
フィルターを編集すると統計期間が更新され、直前の編集から短期間にまた処理速度が落ちる状況になった時、作動不能になる可能性があること、また設定値によってはご利用のウィキで不正利用の編集が正当なものを上回った場合、フィルターが実効性を失う点にご注意ください。
フィルターの作成と管理
拡張機能がインストールされた後は、Special:AbuseFilterから不正利用フィルター管理ページに飛び、フィルターを作成、テスト、変更、削除できます。
- フィルターの記述法 - フィルタの記述法の基本
- 操作
- グローバルなルール
- 制限条件の適用を最大化するには
- 拡張機能をインストール後、対象のフィルターを読み込むにはウィキペディアのフィルター管理ページを開いて読み込む対象のフィルターを選択 (例) して「ツール」欄の「このフィルターを別のウィキにエクスポートする」をクリック。表示された文字列をコピーし、フィルターを利用するウィキの「Special:AbuseFilter/import」を開き、ペーストします。
- m:Small wiki toolkits/Starter kit/AbuseFilter - 小規模ウィキコミュニティのガイドライン(メタウィキ)
API
不正利用フィルターは2つのAPIリストモジュールを作成します。一つは不正利用フィルター ("abusefilters") 、もう一つは不正利用ログの詳細情報です。これらは他の MediaWiki のログ ("abuselog") からは分離されているので、 API を使用しての不正利用フィルターの作成や修正はできません。
list = abusefilters
以下にフィルターについての情報を提示しています。
- パラメーター
abfstartid
- 列挙を開始するフィルター IDabfendid
- 列挙を停止するフィルター IDabfdir
- 列挙する方向 (古い順、新しい順)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
- 列挙する方向 (古い順、新しい順)afluser
- 特定の利用者または IP アドレスが試行したエントリーに限定。afltitle
- 操作が特定のページに関するエントリーのみ表示。aflfilter
- 特定のフィルター ID を起動したエントリーのみ表示afllimit
- 列挙するエントリー数の最大値aflprop
- 取得するプロパティ: (ids|filter|user|ip|title|action|details|result|timestamp|hidden|revid|wiki)
- 例
利用者 "SineBot" からの操作に対応して不正利用フィルターが作動したインスタンスの一覧を表示する
結果 |
---|
{
"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"
}
]
}
}
|
起こりうるエラー
- 利用者の中には新規のフィルタ作成もしくは既存のフィルタの編集に失敗し、編集しようとしたページが表示 (リダイレクト) されてしまうことがあります。 SSL 認証を採用するウィキをご利用の場合だと、エラーの要因は
$wgServer
値つまり「https://」ではなく「http://」を採用した url に反応したと想定できます。 An indication of this error will be, the browser giving https warning for Special:AbuseFilter pages. (Topic:T23dyyih0ofjada5)
他の拡張機能との連携
不正使用フィルターを他の拡張機能と組み合わせて使う方法はいろいろあります。
フィルターに変数を追加するには
不正使用フィルターに新規に変数を追加できます。サンプルをご用意しました 。実施するには、次の手順に従ってください。
- AbuseFilter-builder ホックのハンドラを追加します。 変数の追加には
$builder['vars']['variable_name'] = 'i18n-key';
を使い、variable_name
に変数の名称、i18n-key
に言語版の略称を当てます。 完全なキーはabusefilter-edit-builder-vars-{$your_key}
になります。 - 先ほどのポイントに翻訳したメッセージを加えます。
- 変数を計算するフックハンドラーを選択。使用事例により以下の選択肢があります。
- AbuseFilter-generateTitleVars フックの実施。ページ関連の変数に特化したもの
- AbuseFilter-generateUserVars フックを実行。利用者関連の変数に対応。
- AbuseFilter-generateGenericVars を実行。ページあるいは利用者に特化しない変数に対応。
- 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. もしその機能を実行したいなら (試用は推奨される)、上記から選んだフックに限定して使い、3番目のパラメータ (
$RCRow
) を必ず設定すること。
- フックのハンドラ内には、変数を指定する方法が2種類あります。
- 「直接的」な方法では
$vars->setVar( 'var_name', var_value );
を呼び出します。これは変数が単純で計算処理が重くない場合に限定されます。フィルターが使わない変数も計算処理の対象だからです。 - 「手抜き」式なら
$vars->setLazyLoadVar( 'var_name', 'method_name', $params );
を呼び出します。 この場合は 'method_name' は (独自の) 識別子として変数の計算に使われます。 (そのため接頭辞としてご自分の拡張機能名 + 'method_name' と描くように推奨されます。) 手法の登録には AbuseFilter-computeVariable フックにハンドラを設定してください。その中には命名した 'method_name' の一致を$method がパスするかどうか確認し、する場合のみ変数を計算させます。 最後に、変数を処理しておくべきパラメータは$paramsにまとめてあります。これらの送り先は computeVariable フックのハンドラです。 この事例を確かめるには、統合ログインCentralAuth のglobal_user_groups
を表示してください。
- 「直接的」な方法では
カスタム操作の追加
ハンドラにカスタム操作を追加すると、個別のフィルターが実施する操作を増やせます。 その方法は、操作に名前をつけて次へ進みます (例として 'my-action' とする):
- クラスを作成してたとえば MyAction と命名、文字数は \MediaWiki\Extension\AbuseFilter\Consequence 以上で HookAborterConsequence または 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 );
};
}
次に以下の多言語版用の i18n メッセージを追加する必要がある; メッセージの用途を確認するには、'my_action' にたとえば 'block' を代入する。
'abusefilter-edit-action-${my_action}'
'abusefilter-action-${my_action}'
新しい規則グループの追加
新しい規則のグループを複数追加し、既存の不正使用フィルターをグループ化することも可能です。 現状ではフィルターごとに指定できるグループは1件に限られる点にご留意ください(T116642)。 現在、この機能を活用するのは Extension:StructuredDiscussions のみです。 実行するには次の措置が必要です。
- グループ名を
$wgAbuseFilterValidGroups
に追加 - コードを追加し、ご利用のグループでフィルターを発動させます。 AbuseFilter はその部分の措置自動化してありません。
AbuseFilterRunner
対象を作成してご利用のグループ名で渡します。
関連項目
- この拡張機能が有効な WMF のウィキ (設定を含む)
この拡張機能は 1 つ以上のウィキメディアのプロジェクトで使用されています。 これはおそらく、この拡張機能が安定していて高いトラフィックのウェブサイトでも十分に動作することを意味します。 この拡張機能がインストールされている場所を確認するには、ウィキメディアの設定ファイル CommonSettings.php および InitialiseSettings.php 内で、この拡張機能の名前を探してください。 特定のウィキにインストールされている拡張機能の完全な一覧は、そのウィキの Special:Version ページにあります。 |
この拡張機能は以下のウィキ ファーム/ウィキ ホスト/パッケージに含まれています: これは正式な一覧ではありません。 一部のウィキ ファーム/ウィキ ホスト/パッケージは、ここに記載されていなくてもこの拡張機能を含んでいる場合があります。 必ずご利用のウィキ ファーム、ウィキ ホスト、バンドルで確認してください。 |