Расширение: AbuseFilter
![]() Статус релиза: стабильно |
|
---|---|
![]() |
|
Реализация | Действия пользователя , Служебная страница , API |
Описание | Позволяет применять конкретные ограничения к активности в вики. |
Автор(ы) |
|
Политика совместимости | Снэпшоты выходят вместе с MediaWiki. Мастер не имеет обратной совместимости. |
MediaWiki | >= 1.43.0 |
Изменения в БД | Да |
Composer | mediawiki/abuse-filter |
Таблицы | abuse_filter abuse_filter_action abuse_filter_history abuse_filter_log |
Лицензия | GNU General Public License 2.0 или позднее |
Скачать | |
|
|
|
|
|
|
|
|
Ежеквартальные загрузки | 162 (Ranked 39th) |
Использование общедоступными вики | 2,939 (Ranked 186th) |
Переведите расширение AbuseFilter, если оно доступно на translatewiki.net | |
Проблемы | Открытые задачи · Сообщить об ошибке |
Расширение Обусловлена позволяет привилегированным пользователям устанавливать фильтры, контролирующие действия участников и автоматически реагирующие на определённое поведение.
Например, может быть создан фильтр, чтобы запретить анонимным пользователям добавлять внешние ссылки или блокировать пользователей, удаляющих более 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' );
- Выполните скрипт обновления, который автоматически создаст необходимые таблицы, используемые расширением.
- Настройте так, как это требуется.
- Готово – Перейдите на страницу Special:Version на своей вики, чтобы удостовериться в том, что расширение успешно установлено.
So, after installation from Git change to the directory containing the extension e.g. "../extensions/AbuseFilter/" and run composer install --no-dev
, or when updating: composer update --no-dev
.
Alternatively as well as preferably add the line "extensions/AbuseFilter/composer.json"
to the "composer.local.json" file in the root directory of your wiki like e.g.
{
"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-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;
Параметры
Название переменной | Значение по умолчанию | Описание |
---|---|---|
$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
|
Позволяет настроить расширение для отправки уведомлений о попаданиях в специальные: RecentChanges или UDP. Доступные опции: rc, udp, rcandudp
For sending changes to abuse filters to Special:RecentChanges, use
unset($wgLogRestrictions['abusefilter']); . |
$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
]
|
Запретить централизованным фильтрам выполнять действия, для которых в этой переменной установлено значение true. |
$wgAbuseFilterBlockDuration
|
'indefinite'
|
Продолжительность блокировки, совершаемой фильтром злоупотреблений.
as of 1.31.0-wmf.25 block durations may be specified for every single filter and will override this variable. Эта переменная используется только тогда, когда включается блокировка, чтобы предварительно выбрать длительность по умолчанию.
|
$wgAbuseFilterAnonBlockDuration
|
null
|
Продолжительность блокировки, сделанных фильтром злоупотреблений, на пользователей, которые не вошли в систему. Значение $wgAbuseFilterBlockDuration будет использоваться, если оно не установлено.
as of 1.31.0-wmf.25 block durations may be specified for every single filter and will override this variable. This variable is only used when enabling the block in order to preselect a default duration.
|
$wgAbuseFilterBlockAutopromoteDuration
|
5
|
Duration, in days, for which users' autopromotion is blocked by filters. |
$wgAbuseFilterDefaultWarningMessage
|
[
'default' => 'abusefilter-warning'
]
|
Предупреждающие сообщения по умолчанию для каждой группы фильтров |
$wgAbuseFilterDefaultDisallowMessage
|
[
'default' => 'abusefilter-disallowed'
]
|
Default disallow messages, per filter group |
$wgAbuseFilterLogIP
|
true
|
Whether to include IP in the abuse_filter_log |
$wgAbuseFilterLogIPMaxAge
|
3 * 30 * 24 * 3600
|
Age используется в качестве порогового значения при очистке старых данных журнала IP. По умолчанию - 3 месяца. Используется сценарием обслуживания 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. |
Аварийное регулирование
AbuseFilter поставляется с функцией, которая автоматически регулирует (отключает) фильтры, которые были недавно отредактированы и соответствуют определенному количеству последних действий.
Это делается для предотвращения вредных правок в фильтрах, чтобы блокировать каждого пользователя, который выполняет действие в вики или типа того.
Условие для отключения фильтра зависят от следующих переменных:
$wgAbuseFilterEmergencyDisableThreshold
- Процент совпадений от общего количества действий за наблюдаемый период.$wgAbuseFilterEmergencyDisableCount
- Счёт совпадений фильтра в наблюдаемый период.$wgAbuseFilterEmergencyDisableAge
- Возраст фильтра, который необходимо учитывать. Если последнее изменение фильтра больше этого указанного количества секунд, то фильтр не будет отключен, если он уже не был отключен до этого.
Отключённые фильтры можно увидеть в списке фильтров (Special:AbuseFilter) с состоянием Включён, Высокая частота совпадений. Отключение фильтра правок происходит втихаря, и нет никакого способа увидеть, когда фильтр был отключён.
Когда фильтр отключён, то он не выполняет никаких опасных действий (тех, которые могут предотвратить текущее действие), и разрешены только «безопасные» действия. Отключённые фильтры не включаются автоматически. Чтобы отменить отключение фильтра, Вы должны отредактировать фильтр. Обратите внимание, что вам действительно нужно что-то изменить в фильтре: достаточно изменить что-то в заметках фильтра.
Обратите внимание, что редактирование фильтра обновляет его возраст и может привести к его отключению, если он снова достигнет условий, при которых фильтр отключается, что приведет к непригодному для использования фильтру, если в вашей вики есть больше неправильных правок, чем нормальных.
Создание и управление фильтрами
После того, как расширение установлено, фильтры могут быть созданы/проверены/изменены/удалены и журналы доступны на странице управления фильтрами злоупотребления Special:AbuseFilter.
- Формат правил - Основы написания фильтра
- Действия
- Глобальные правила
- Руководство по оптимизации использования условий лимита
- Чтобы импортировать фильтры из Википедии: когда вы установили расширение, перейдите на страницу w:Special:AbuseFilter, выберите фильтр (w:Special:AbuseFilter/3), затем нажмите «Экспортировать этот фильтр на другую wiki», скопируйте текст, перейдите в «Special:AbuseFilter/import» в вашей wiki, и вставьте текст.
- m:Small wiki toolkits/Starter kit/AbuseFilter - Руководство для небольших вики на metawiki
API
AbuseFilter добавляет два API-модуля, один для фильтров злоупотреблений ("abusefilters") и один для журнала злоупотреблений, так как он является самостоятельным журналом ("abuselog").
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)
- Пример
Результат |
---|
{
"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"
}
]
}
}
|
Возможные ошибки
- Некоторые участники могут заметить, что создание новых фильтров или изменение старых не работает и участника перенаправляет на изначальную страницу. If the Wiki is using SSL certificates, this error could possibly be because of the
$wgServer
value, which might be using "http://" instead of "https://". An indication of this error will be, the browser giving https warning for Special:AbuseFilter pages. (Topic:T23dyyih0ofjada5)
Интеграция с другими расширениями
Вы можете интегрировать AbuseFilter с другим расширением различными способами.
= Добавление переменных для фильтрации
Можно добавлять новые переменные для использования в фильтрах злоупотреблений. Доступен список примеров. Чтобы сделать это, вам нужно:
- Добавьте обработчик для перехвата вызова функции AbuseFilter-builder . Чтобы добавить переменную, вы должны использовать
$builder['vars']['variable_name'] = 'i18n-key';
, гдеvariable_name
- имя переменной, аi18n-key
- фрагмент ключа i18n. Полный ключ будетabusefilter-edit-builder-vars-{$your_key}
. - Добавьте сообщения i18n, которые Вы выбрали в предыдущем пункте.
- Выберите обработчик события, в котором будет вычисляться переменная. В зависимости от вашего варианта использования вы можете:
- Реализуйте событие AbuseFilter-generateTitleVars ; это особенно важно для переменных, связанных со страницами;
- 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. If you want to implement that feature (and it's recommended to do so), you should use one of the hooks listed above, and use its third parameter (
$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
Adding custom actions
You can add custom action handlers, so that each filter may perform further actions. 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
- Add a subscriber to the AbuseFilterCustomActions hook; the subscriber should provide a callback as documented in the hook documentation, that returns an instance of the class created above, for instance:
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). На данный момент эта функция встроена только в расширение Extension:StructuredDiscussions . Чтобы сделать это, вам нужно:
- Добавить название группы в
$wgAbuseFilterValidGroups
- Добавить код, чтобы запускать фильтры в вашей группе. Заметьте, что AbuseFilter не будет это делать самостоятельно. Для этого вам нужно создать объект
AbuseFilterRunner
, передав название вашей группы.
См. также
- Список проектов Викимедиа, где включен фильтр злоупотреблений (и с какой конфигурацией)
Это расширение используется в одном или нескольких проектах Викимедиа. Вероятно, это означает, что расширение стабильно и работает достаточно хорошо, чтобы использоваться такими сайтами с высоким трафиком. Найдите название этого расширения в файлах конфигурации Викимедиа CommonSettings.php и InitialiseSettings.php, чтобы узнать, где оно установлено. Полный список расширений, установленных на конкретной вики, можно увидеть на странице Special:Version wiki. |
Это расширение включено в следующие вики-фермы/хостинги и/или пакеты: Это не исчерпывающий список. Некоторые вики-фермы/хостинги и/или пакеты могут содержать это расширение, даже если они не перечислены здесь. Всегда сверяйтесь со своими вики-фермами/хостингами или комплектами/бандлами для подтверждения. |