Extension:AbuseFilter

This page is a translated version of the page Extension:AbuseFilter and the translation is 95% complete.
Other languages:
Bahasa Indonesia • ‎Deutsch • ‎Deutsch (Sie-Form) • ‎English • ‎Türkçe • ‎català • ‎dansk • ‎español • ‎français • ‎galego • ‎magyar • ‎polski • ‎português • ‎português do Brasil • ‎română • ‎sicilianu • ‎čeština • ‎български • ‎русский • ‎עברית • ‎العربية • ‎سنڌي • ‎فارسی • ‎हिन्दी • ‎中文 • ‎日本語 • ‎粵語 • ‎한국어
MediaWiki 拡張機能マニュアル
OOjs UI icon advanced-invert.svg
AbuseFilter
リリースの状態: 安定
AbuseFilter-Management.png
実装 利用者アクティビティ , 特別ページ , API
説明 ウィキでの活動に対して、特定の挙動ベースの制限をかけられるようにする
作者
互換性ポリシー Snapshots releases along with MediaWiki. Master is not backward compatible.
MediaWiki 1.33+
PHP 5.4+ 推奨
データベースの変更 はい
テーブル abuse_filter
abuse_filter_action
abuse_filter_history
abuse_filter_log
ライセンス GNU 一般公衆利用許諾書 2.0 以降
ダウンロード
  • $wgAbuseFilterConditionLimit
  • $wgAbuseFilterRangeBlockSize
  • $wgAbuseFilterAnonBlockDuration
  • $wgAbuseFilterLogIPMaxAge
  • $wgAbuseFilterCentralDB
  • $wgAbuseFilterDefaultWarningMessage
  • $wgAbuseFilterEmergencyDisableAge
  • $wgAbuseFilterProfileActionsCap
  • $wgAbuseFilterActionRestrictions
  • $wgAbuseFilterActions
  • $wgAbuseFilterAflFilterMigrationStage
  • $wgAbuseFilterLogIP
  • $wgAbuseFilterPrivateDetailsForceReason
  • $wgAbuseFilterEmergencyDisableCount
  • $wgAbuseFilterLogPrivateDetailsAccess
  • $wgAbuseFilterSlowFilterRuntimeLimit
  • $wgAbuseFilterEmergencyDisableThreshold
  • $wgAbuseFilterLocallyDisabledGlobalActions
  • $wgAbuseFilterBlockDuration
  • $wgAbuseFilterDefaultDisallowMessage
  • $wgAbuseFilterValidGroups
  • $wgAbuseFilterNotificationsPrivate
  • $wgAbuseFilterBlockAutopromoteDuration
  • $wgAbuseFilterIsCentral
  • $wgAbuseFilterNotifications
  • abusefilter-modify
  • abusefilter-log-detail
  • abusefilter-view
  • abusefilter-log
  • abusefilter-privatedetails
  • abusefilter-privatedetails-log
  • abusefilter-modify-restricted
  • abusefilter-revert
  • abusefilter-view-private
  • abusefilter-log-private
  • abusefilter-hidden-log
  • abusefilter-hide-log
  • abusefilter-modify-global
translatewiki.net で翻訳を利用できる場合は、AbuseFilter 拡張機能の翻訳にご協力ください

使用状況とバージョン マトリクスを確認してください。

問題点 未解決のタスク · バグを報告
Coolest Tool Award 2020 square logo.svg

AbuseFilter

2020 Coolest Tool
Award Winner

in the category
Quality


AbuseFilter(不正利用フィルター)拡張機能は利用者が編集等の特定の種類の行動をとった場合、自動的に既定の挙動をするもので、権限を持つ利用者が設定・調整します。

例えば匿名利用者が外部リンクを追加できなくしたり、2,000文字以上を除去した利用者をブロックするなどのフィルターを作成できます。

インストール

  • ダウンロードして、ファイルを extensions/ フォルダー内の AbuseFilter という名前のディレクトリ内に配置します。
  • Git でのインストールの場合のみ、PHP の依存関係をインストールするため Composer を実行します。 (See タスク T173141 for potential complications.)
  • 以下のコードを LocalSettings.php の末尾に追加します:
    wfLoadExtension( 'AbuseFilter' );
    
  • 更新スクリプトを実行します。このスクリプトは、この拡張機能が必要とするデータベース テーブルを自動的に作成します。
  • 必要に応じて設定します。
  •   完了 – ウィキの「Special:Version」に移動して、拡張機能が正しくインストールされたことを確認します。

MediaWiki 1.26 以前を稼働させている利用者へ:

上記の手順では、wfLoadExtension() を使用してこの拡張機能をインストールする新しい方法を記載しています。 この拡張機能をこれらの過去のバージョン (MediaWiki 1.26 以前) にインストールする必要がある場合は、wfLoadExtension( 'AbuseFilter' ); の代わりに以下を使用する必要があります:

require_once "$IP/extensions/AbuseFilter/AbuseFilter.php";

設定

利用者権限

拡張機能をインストールしたら、"LocalSettings.php" で利用者権限をセットアップしてください。

権限 説明
abusefilter-modify 不正利用フィルターを作成/変更
abusefilter-view 不正利用フィルターを閲覧
abusefilter-log 不正利用記録を閲覧
abusefilter-log-detail 不正利用記録の詳細項目を閲覧
abusefilter-privatedetails 不正利用記録内の非公開データを閲覧
abusefilter-modify-restricted 制限された操作を含む不正利用フィルターを変更
abusefilter-modify-global グローバル不正利用フィルターを作成/変更
abusefilter-revert 指定した不正利用フィルターによるすべての変更を差し戻す
abusefilter-view-private 非公開の不正利用フィルターを閲覧
abusefilter-log-private 非公開の不正利用フィルター記録を閲覧
abusefilter-hide-log 不正利用記録の項目を隠す
abusefilter-hidden-log 隠された不正利用記録を閲覧
abusefilter-privatedetails-log 不正利用フィルター非公開記録の調査記録を閲覧

例えば、以下の設定例では、管理者には不正利用フィルターの全操作を、一般利用者には公開しているフィルターに限り設定、ログの閲覧を許可しています。

$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;
「非公開」とマークされたフィルターは、abusefilter-modify 権限または abusefilter-view-private 権限のどちらかを持つ利用者のみが閲覧できます。

パラメーター

変数名 既定値 説明
$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
$wgAbuseFilterNotificationsPrivate
false
非公開フィルターの通知を有効にするかどうか。
$wgAbuseFilterCentralDB
null
グローバル不正利用フィルターが保存されるデータベースの名前 (対応は最新の開発版に限定)。 Requires CentralAuth installed otherwise global filters will break on a wikifarm.
$wgAbuseFilterIsCentral
false
グローバルな不正利用フィルターが保存されるウィキに対してこの変数を true にセット(グローバルフィルターを利用している場合)。 Requires CentralAuth installed otherwise global filters will break on a 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
Duration, in days, for which users' autopromotion is blocked by filters.
$wgAbuseFilterCustomActionsHandlers
[]
特定のアクションのコールバック機能。 (1.36 以降廃止予定) 代わりとしてAbuseFilterCustomActionsフックを使ってください。
$wgAbuseFilterDefaultWarningMessage
[
    'default' => 'abusefilter-warning'
]
フィルター単位の既定の警告メッセージ群
$wgAbuseFilterDefaultDisallowMessage
[
    'default' => 'abusefilter-disallowed'
]
Default disallow messages, per filter group
$wgAbuseFilterLogIPMaxAge
3 * 30 * 24 * 3600
IPアドレスログの保持期間。標準設定では3ヶ月(90日)となっている。メンテナンススクリプト「purgeOldLogIPData.php」がこの変数を利用する。
$wgAbuseFilterProfileActionsCap
10000
プロファイリング統計のリセット基準となるアクション件数
$wgAbuseFilterLogPrivateDetailsAccess
false
フィルタのログ経由の個人情報アクセスを記録するかどうか
$wgAbuseFilterPrivateDetailsForceReason
false
フィルタのログ入力により、利用者が個人情報位入力を強制されたかどうか
$wgAbuseFilterSlowFilterRuntimeLimit
500
Runtime in milliseconds before a filter is considered slow.
$wgAbuseFilterRangeBlockSize
[
    'IPv4' => '16',
    'IPv6' => '19',
]
Size of the range blocked by 'rangeblock' action.
$wgAbuseFilterLogIP
true
Whether to include IP in the abuse_filter_log

緊急速度制限

不正利用フィルターには最近の編集および特定の閾値に該当する最新の操作を、自動的に速度を制限 (無効化) させる機能が付属します。

これはフィルターに有害な編集ができないように、ウィキなどで特定の操作をする全ての利用者をブロックする措置です。

フィルターを無効化する条件は以下の変数で制御します:

  • $wgAbuseFilterEmergencyDisableThreshold - 観察期間の全ての操作に占める割合。
  • $wgAbuseFilterEmergencyDisableCount - 観察期間にフィルターが発動した件数。
  • $wgAbuseFilterEmergencyDisableAge - 考慮するフィルターの古さ。 フィルターの最後の編集がこの秒数より古い場合、すでに絞り込まれていない限り、フィルターは絞り込まれません。
  • $wgAbuseFilterProfileActionsCap - 閾値と対比させた最近の操作の最大件数。 各操作はカウンターを増加させ、カウンターが設定された値に達すると、カウンターとすべてのフィルターに一致する最近の操作のカウントが0にリセットされることに注意してください。

速度制限フィルターは、フィルターのリスト(Special:AbuseFilter)の状態 有効, 速度を制限で識別できます。 速度制限は密かに発動し、フィルターがいつ速度制限を発動したのか確認する方法はありません。

フィルターが速度制限を受けた時、(現在実行中の操作を妨害するような) 危険な操作は実行されず、"安全な"操作のみ実行が許可されます。 速度制限のフィルターは自動的は有効になりません。速度制限を無効にするにはフィルターを編集する必要があります。 フィルターに何らかの編集を加える必要があることに注意してください。フィルターのメモを変更するだけで十分です。

フィルターを編集すると統計期間が更新され、直前の編集から短期間にまた処理速度が落ちる状況になった時、作動不能になる可能性があること、また設定値によってはご利用のウィキで不正利用の編集が正当なものを上回った場合、フィルターが実効性を失う点にご注意ください。 フィルタはまた操作回数の閾値が $wgAbuseFilterProfileActionsCapに達するとアトランダムに加速され、フィルタ適合カウントを一斉に 0 (ゼロ) にリセット、また誰かが繰り返しフィルタの発動を招くことになります。

フィルターの作成と管理

拡張機能がインストールされた後は、Special:AbuseFilterから不正利用フィルター管理ページに飛び、フィルターを作成、テスト、変更、削除できます。

API

不正利用フィルターは2つのAPIリストモジュールを作成します。一つは不正利用フィルター ("abusefilters") 、もう一つは不正利用ログの詳細情報です。これらは他の MediaWiki のログ ("abuselog") からは分離されているので、 API を使用しての不正利用フィルターの作成や修正はできません。

list = abusefilters

以下にフィルターについての情報を提示しています。

パラメーター
  • abfstartid - 列挙を開始するフィルター ID
  • abfendid - 列挙を停止するフィルター ID
  • abfdir - 列挙する方向 (古い順、新しい順)
  • abfshow - これらの基準を満たすフィルターのみ表示 (enabled|!enabled|deleted|!deleted|private|!private)
  • abflimit - 列挙するフィルター数の上限
  • abfprop - 取得するプロパティ (id|description|pattern|actions|hits|comments|lasteditor|lastedittime|status|private)

フィルターの提供時に abfprop で指定したプロパティの一部は適切な利用者権限がない限り検出されません。

非公開以外の不正利用フィルターを列挙

結果
<api>
  <query>
    <abusefilters>
      <filter id="1" hits="867" />
      <filter id="3" hits="66110" />
      <filter id="5" hits="464" />
      <filter id="6" hits="19" />
      <filter id="8" hits="7" />
      <filter id="9" hits="24869" />
      <filter id="11" hits="10033" />
      <filter id="14" hits="63" />
      <filter id="15" hits="15" />
      <filter id="16" hits="44" />
    </abusefilters>
  </query>
  <query-continue>
    <abusefilters abfstartid="18" />
  </query-continue>
</api>

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" からのアクションに対応して不正利用フィルターが作動したインスタンスの一覧を表示する

結果
<api>
  <query>
    <abuselog>
      <item id="900937" filter_id="211" user="SineBot" result="" />
      <item id="888404" filter_id="211" user="SineBot" result="" />
      <item id="862751" filter_id="211" user="SineBot" result="" />
      <item id="855649" filter_id="211" user="SineBot" result="" />
      <item id="842429" filter_id="211" user="SineBot" result="" />
      <item id="840958" filter_id="1" user="SineBot" result="" />
      <item id="824151" filter_id="211" user="SineBot" result="" />
      <item id="804892" filter_id="211" user="SineBot" result="" />
      <item id="205254" filter_id="58" user="SineBot" result="disallow" />
      <item id="205252" filter_id="58" user="SineBot" result="disallow" />
    </abuselog>
  </query>
  <query-continue>
    <abuselog aflstart="2009-04-19T02:07:55Z" />
  </query-continue>
</api>

起こりうるエラー

  • 利用者の中には新規のフィルタ作成もしくは既存のフィルタの編集に失敗し、編集しようとしたページが表示 (リダイレクト) されてしまうことがあります。 SSL 認証を採用する Wiki をご利用の場合だと、エラーの要因は$wgServer 値つまり「https://」ではなく「http://」を採用した url に反応したと想定できます。このエラー発生は、ブラウザが httpドメインに対する警告としてw:ja:編集フィルターが発動します。(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 を実行。ページあるいは利用者に特化しない変数に対応。
    • AbuseFilterAlterVariables フックを実行; 他のフックに比べてやや柔軟性がある代わりにマイナス面もある。「最近の変更」の過去版を調べるときに変数が使えない。 もしその機能を実行したいなら (試用は推奨される)、上記から選んだフックに限定して使い、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 MyConsequence 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 MyConsequence( $params, $rawParams );
    };
}

次に以下の多言語版用の i18n メッセージを追加する必要がある; メッセージの用途を確認するには、'my_action' にたとえば 'block' を代入する。

  • 'abusefilter-edit-action-${my_action}'
  • 'abusefilter-action-${my_action'

新しい規則グループの追加

新しい規則のグループを複数追加し、既存の不正使用フィルターをグループ化することも可能です。 現状ではフィルターごとに指定できるグループは1件に限られる点にご留意ください(T116642)。 現在、この機能を活用するのはExtension:StructuredDiscussionsのみです。 実行するには次の措置が必要です。

  • グループ名を $wgAbuseFilterValidGroups に追加
  • コードを追加し、ご利用のグループでフィルターを発動させます。 AbuseFilter はその部分の措置自動化してありません。AbuseFilterRunner 対象を作成してご利用のグループ名で渡します。

関連項目