Extension:AbuseFilter

This page is a translated version of the page Extension:AbuseFilter and the translation is 85% complete.
この拡張機能は MediaWiki 1.38 以降に同梱されています。 そのため再度ダウンロードする必要はありません。 しかし、提供されているその他の手順に従う必要はあります。
MediaWiki 拡張機能マニュアル
AbuseFilter
リリースの状態: 安定
実装 利用者アクティビティ , 特別ページ , API
説明 ウィキの活動に特定の行動ベースで制限をかける
作者
互換性の方針 MediaWiki とともにリリースされるスナップショット。 master には後方互換性がありません。
MediaWiki >= 1.43.0
データベースの変更 はい
Composer mediawiki/abuse-filter
テーブル abuse_filter
abuse_filter_action
abuse_filter_history
abuse_filter_log
ライセンス GNU 一般公衆利用許諾書 2.0 以降
ダウンロード
  • $wgAbuseFilterConditionLimit
  • $wgAbuseFilterRangeBlockSize
  • $wgAbuseFilterAnonBlockDuration
  • $wgAbuseFilterLogIPMaxAge
  • $wgAbuseFilterCentralDB
  • $wgAbuseFilterDefaultWarningMessage
  • $wgAbuseFilterEmergencyDisableAge
  • $wgAbuseFilterEnableBlockedExternalDomain
  • $wgAbuseFilterActionRestrictions
  • $wgAbuseFilterActions
  • $wgAbuseFilterProtectedVariables
  • $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
  • abusefilter-modify-blocked-external-domains
  • abusefilter-bypass-blocked-external-domains
  • abusefilter-access-protected-vars
四半期ごとのダウンロード数 131 (Ranked 41st)
使用中の公開ウィキ 2,939 (Ranked 186th)
translatewiki.net で翻訳を利用できる場合は、AbuseFilter 拡張機能の翻訳にご協力ください
問題点 未解決のタスク · バグを報告

AbuseFilter

2020 Coolest Tool
Award Winner

in the category
Quality


AbuseFilter (不正利用フィルター) 拡張機能は、権限のある利用者が、利用者による編集などの操作が特定の条件に一致した場合に取るべき操作を設定できます。

例えば、未登録の利用者が外部リンクを追加できないようにしたり、2000文字以上の除去を行った利用者をブロックするフィルターを作成することができます。

インストール

  • ダウンロードして、ファイルをextensions/フォルダー内のAbuseFilterという名前のディレクトリ内に配置します。
    開発者とコード寄稿者は、上記の代わりに以下を使用してGitからインストールします:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter
  • Gitでのインストールの場合のみ、PHPの依存関係をインストールするためComposerを実行します。 (合併症の可能性についてはタスク T173141を参照。)
  • 以下のコードを LocalSettings.php ファイルの末尾に追加します:
    wfLoadExtension( 'AbuseFilter' );
    
  • 更新スクリプトを実行します。このスクリプトは、この拡張機能が必要とするデータベーステーブルを自動的に作成します。
  • 必要に応じて設定します。
  •   完了 – ウィキの「Special:Version」に移動して、拡張機能が正しくインストールされたことを確認します。
また、Gitからインストールする場合、この拡張機能はComposer を必要とすることに注意してください。

そのため、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"にユーザー権限を設定する必要があります。

User rights for AbuseFilter
権限 説明 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-modify-blocked-external-domains リンクをブロックする外部ドメインの作成または変更 sysop
abusefilter-bypass-blocked-external-domains ブロックされた外部ドメインを回避 Requires the edit right bot

例えば、以下の設定例では、管理者には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;
「非公開」とマークされたフィルターは、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
]
Disable a filter if it matched more than 2 edits, constituting more than 5 % of the actions which were checked against the filter's group in the "observed" period (at most one day), and the filter has been changed in the last 86400 seconds (one day). 緊急停止をご参照ください。
$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」の他、「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
MW 1.41+ グローバル不正利用フィルターが保存されるデータベースの名前。 CentralAuthがインストールされている必要があります。そうしないと、グローバルフィルターがwikifarmで壊れてしまいます。
$wgAbuseFilterIsCentral
false
MW 1.41+ グローバルな不正利用フィルターが保存されるウィキに対してこの変数を 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
Duration of blocks made by AbuseFilter on users who are not logged in. The value of $wgAbuseFilterBlockDuration will be used if this is not set.
バージョン 1.31.0-wmf.25 からはフィルタ毎に指定したブロック持続期間が優先適用されます。 この変数の利用は、あらかじめ設定した期間限定でブロックを発動する場合に限定されます。
$wgAbuseFilterBlockAutopromoteDuration
5
利用者の自動昇格がフィルターによってブロックされる期間 (日数)。
$wgAbuseFilterDefaultWarningMessage
[
    'default' => 'abusefilter-warning'
]
フィルター単位の既定の警告メッセージ群
$wgAbuseFilterDefaultDisallowMessage
[
    'default' => 'abusefilter-disallowed'
]
フィルタグループごとのデフォルトの禁止メッセージ
$wgAbuseFilterLogIP
true
IPをabuse_filter_logに含めるかどうか
$wgAbuseFilterLogIPMaxAge
3 * 30 * 24 * 3600
IPアドレスログの保持期間。標準設定では3ヶ月(90日)となっている。メンテナンススクリプト「purgeOldLogIPData.php」がこの変数を利用する。
$wgAbuseFilterProfileActionsCap
10000
プロファイリング統計情報をリセットするタイミングを決定する操作の件数。
$wgAbuseFilterLogPrivateDetailsAccess
false
フィルターの記録項目からの個人情報へのアクセスを記録に格納するかどうか。
$wgAbuseFilterPrivateDetailsForceReason
false
フィルタのログ入力により、利用者が個人情報位入力を強制されたかどうか
$wgAbuseFilterSlowFilterRuntimeLimit
500
フィルタが遅いと判断されるまでのランタイム(ミリ秒)。
$wgAbuseFilterRangeBlockSize
[
    'IPv4' => '16',
    'IPv6' => '19',
]
'rangeblock' 操作でブロックされた範囲のサイズ。

緊急速度制限

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

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

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

  • $wgAbuseFilterEmergencyDisableThreshold - 観察期間の全ての操作に占める割合。
  • $wgAbuseFilterEmergencyDisableCount - 観察期間にフィルターが発動した件数。
  • $wgAbuseFilterEmergencyDisableAge - 考慮するフィルターの古さ。 フィルターの最後の編集がこの秒数より古い場合、すでに絞り込まれていない限り、フィルターは絞り込まれません。

速度制限フィルターは、フィルターのリスト(Special:AbuseFilter)の状態 有効, 高い一致率で識別できます。 Throttling happens silently, and there's no way to see when a filter got throttled, except when Extension:Echo is installed, then a notification is sent to the user who was last to modify the filter.

フィルターが速度制限を受けると、危険な操作 (通常、利用者をブロックしたり、グループから除去したりするような特別な権限に制限される操作で、$wgAbuseFilterActionRestrictions によって制御される) は行わず、「安全」な操作だけが許可されます (進行中の操作を警告したり防止したりすることができるものです)。 速度制限のフィルターは自動的は有効になりません。速度制限を無効にするにはフィルターを編集する必要があります。 フィルターに何らかの編集を加える必要があることに注意してください。フィルターのメモを変更するだけで十分です。

フィルターを編集すると統計期間が更新され、直前の編集から短期間にまた処理速度が落ちる状況になった時、作動不能になる可能性があること、また設定値によってはご利用のウィキで不正利用の編集が正当なものを上回った場合、フィルターが実効性を失う点にご注意ください。

フィルターの作成と管理

拡張機能がインストールされた後は、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 で指定したプロパティの一部は適切な利用者権限がない限り検出されません。

非公開以外の不正利用フィルターを列挙
結果
{
    "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 対象を作成してご利用のグループ名で渡します。

関連項目