Расширение определяет специфичный для предметной области язык исключительно для написания правил фильтрации. Поскольку язык не является полным по Тьюрингу , он не может заменить ботов для более сложных задач.
Важный контент взят из mw: Extension: AbuseFilter / Rules format ; см. историю страницы для атрибуции.
Переменные
Фильтр редактирования захватывает следующие данные из правок. Они хранятся в следующих переменных. Им можно управлять и анализировать с помощью различных функций и операторов. Типы данных: int
( целые числа со знаком), string
(последовательности символов Юникода ), bool
(истина и ложь), float
( рациональные числа со знаком ), array
(неассоциативные массивы ) и null
(обычно неинициализированная переменная).
Обратите внимание, что некоторые числовые переменные могут быть определены как строка; чтобы действовать на основе этих переменных, вам может потребоваться преобразовать их в int
. Например, переменная timestamp
- это строка; чтобы извлечь дату, час и т. д., вы должны привести его к int
первому (например int(timestamp) % (60*60*24) === 22
).
«Преобразованный перед сохранением» означает, что викитекст оценивается перед сохранением; т.е. с подстановкой шаблона. Викитекст берется из последней версии перед сохранением страницы. Например, added_lines_pst
of is ; точно дословно.{{subst:Mbox}}
{{#invoke:Message box|mbox}}
added_lines
{{subst:Mbox}}
Примечание . Некоторые из переменных AbuseFilter были объявлены устаревшими, переименованы, удалены или изменили их тип данных в прошлом. Проверьте mediawiki.org документации уточненный.
Описание | Имя | Тип данных | Значения |
---|---|---|---|
Изменить количество пользователей | user_editcount | целое число / ноль | Нулевой для незарегистрированных пользователей. |
Имя учетной записи пользователя | user_name | нить | Примечание : это пусто для действия «createaccount», используйте accountname вместо него. |
Время подтверждения адреса электронной почты | user_emailconfirm | нить | ГГГГММДДЧЧММСС |
Возраст учетной записи пользователя | user_age | целое число | в секундах; 0 для IP |
Заблокирован ли пользователь | user_blocked | bool | true для заблокированных зарегистрированных пользователей, false для незарегистрированных пользователей. |
Редактирует ли пользователь через мобильный интерфейс | user_mobile | bool | верно для мобильных пользователей. |
Группы (в том числе неявные), в которых находится пользователь | user_groups | массив строк | |
Права, которыми обладает пользователь | user_rights | массив строк | |
Идентификатор страницы (находится в исходном HTML-коде страницы - ищите wgArticleId) | page_id | целое число | Теоретически это 0 для новых страниц, но это ненадежно. Вместо этого используйте page_age == 0 для идентификации создания новой страницы. |
Пространство имен страницы | page_namespace | целое число | относится к индексу пространства имен |
Заголовок страницы (без пространства имен) | page_title | нить | |
Полный заголовок страницы | page_prefixedtitle | нить | |
Изменить уровень защиты страницы | page_restrictions_edit | массив строк | |
Уровень защиты страницы от перемещения | page_restrictions_move | массив строк | |
Защита загрузки файла | page_restrictions_upload | массив строк | |
Создать защиту страницы | page_restrictions_create | массив строк | |
Последние десять пользователей, которые добавили на страницу | page_recent_contributors | массив строк | Пусто, если пользователь является единственным участником страницы (?), Сканирует только последние 100 ревизий. |
Первый пользователь, внесший вклад в страницу | page_first_contributor | нить | |
Действие | action | нить | изменить, переместить, создать учетную запись, автосоздать учетную запись, удалить, загрузить, загрузить |
Редактировать сводку / причину | summary | нить | |
Текст старой страницы без какой-либо разметки (больше не используется) | old_wikitext | нить | |
Текст новой страницы без какой-либо разметки | new_wikitext | нить | |
Единая разница изменений, внесенных при редактировании | edit_diff | нить | |
Единое различие изменений, внесенных при редактировании, преобразованных перед сохранением | edit_diff_pst | нить | |
Новый размер страницы | new_size | целое число | |
Старый размер страницы | old_size | целое число | |
Изменение размера при редактировании | edit_delta | целое число | |
Строки добавлены при редактировании, преобразованы перед сохранением | added_lines_pst | массив строк | |
Строки добавлены при редактировании | added_lines | массив строк | |
Строки удалены при редактировании | removed_lines | массив строк | |
Все внешние ссылки в новом тексте | all_links | массив строк | |
Ссылки на странице до редактирования | old_links | массив строк | |
Все внешние ссылки добавлены в редакцию | added_links | массив строк | |
Все внешние ссылки удалены при редактировании | removed_links | массив строк | |
Новый викитекст страницы, преобразованный перед сохранением | new_pst | нить | |
Разобранный исходный код HTML новой ревизии | new_html | нить | |
Abusefilter-edit-builder-vars-new-text-stripped | new_text | нить | |
Было ли внесено изменение через выходной узел Tor | tor_exit_node | bool | |
Метка времени изменения Unix | timestamp | нить | int (timestamp) дает вам число, с помощью которого вы можете вычислить дату, время, день недели и т. д. |
SHA1-хэш содержимого файла в шестнадцатеричном формате | file_sha1 | нить | |
Размер файла в байтах | file_size | целое число | Размер файла в байтах |
Идентификатор страницы перемещения целевой страницы | moved_to_id | целое число | |
Полное название целевой страницы перемещения | moved_to_prefixedtitle | нить | |
Пространство имен целевой страницы перемещения | moved_to_namespace | целое число | |
Пространство имен исходной страницы перемещения | moved_from_namespace | целое число | |
Полное название исходной страницы перемещения | moved_from_prefixedtitle | нить | |
Идентификатор страницы исходной страницы перемещения | moved_from_id | целое число | |
Имя учетной записи (при создании учетной записи) | accountname | нить |
Сравнение
Оператор | Верно, когда ... |
---|---|
< | левый операнд меньше правого. |
> | левый операнд больше правого. |
<= | левый операнд меньше или равен правому. |
>= | левый операнд больше или равен правому. |
= или же == | левый операнд равен правому. |
!= | левый операнд не равен правому. |
=== | левый операнд равен правому, и они имеют один и тот же тип данных. |
!== | левый операнд не равен правому, и они относятся к разному типу данных. |
Арифметика
Оператор | Операция |
---|---|
+ | Добавление |
- | Вычитание |
* | Умножение |
/ | Разделение |
** | Возведение в степень |
% | По модулю (остаток) |
+
объединяет строку со строкой или другим типом данных.
Ключевые слова
like
возвращает истину, если левая строка соответствует правой строке; это отличается от того,=
что правая строка рассматривается как шаблон глобуса .in
возвращает истину, если правая строка содержит левую.contains
является его обратным, т.е. возвращает истину, если левая строка содержит правую строку. Примечание : пустые строки не содержатся и не содержат никакой другой строки (даже самой пустой строки).rlike
возвращает истину, если левая строка соответствует шаблону регулярного выражения в правой строке.irlike
этоrlike
с прецедентной нечувствительностью. Механизм регулярных выражений - PCRE с поддержкой символов Юникода. Это дорого; регулярные выражения с квантификаторами могут экспоненциально расти при редактировании. Фильтр должен использовать как можно меньше поисков по регулярным выражениям.if .. then .. else .. end
и тернарный условный оператор .condition ? if true : else
Объявление новых переменных
Вы можете объявлять новые переменные внутри условия; их область действия - лексическая область видимости, ограниченная условиями, в которых они появляются.
Функции
название | описание |
---|---|
lcase | Возвращает аргумент, преобразованный в нижний регистр. |
ucase | Возвращает аргумент, преобразованный в верхний регистр. |
length | Возвращает длину строки, заданной в качестве аргумента. |
string | Приводит к строковому типу данных. |
int | Приводится к целочисленному типу данных. |
float | Преобразуется в тип данных с плавающей запятой. |
bool | Приводится к логическому типу данных. |
norm | Эквивалентно rmwhitespace(rmspecials(rmdoubles(ccnorm(arg1)))) . |
ccnorm | Нормализует запутанные / похожие символы в аргументе и возвращает каноническую форму. Список символов и их замен можно найти на git , например. ccnorm( "Eeèéëēĕėęě3ƐƷ" ) == "EEEEEEEEEEEEE" . [1] [2] Обратите внимание, что для работы этой функции требуется расширение AntiSpoof . Без него строка просто останется неизменной. |
specialratio | Возвращает количество не буквенно-цифровых символов, разделенное на общее количество символов в аргументе. |
rmspecials | Удаляет все специальные символы в аргументе и возвращает результат. (Эквивалентно s / [^ \ p {L} \ p {N}] // g.) |
rmdoubles | Удаляет повторяющиеся символы в аргументе и возвращает результат. |
rmwhitespace | Удаляет пробелы (пробелы, табуляции и символы новой строки). |
count | Возвращает количество раз, когда игла (первая строка) появляется в стоге сена (вторая строка). Если указан только один аргумент, он разделяется запятыми и возвращает количество сегментов. |
rcount | Подобно тому, count но вместо этого игла использует регулярное выражение. Можно сделать регистронезависимым, если разрешить регулярному выражению начинаться с "(? I)". |
ip_in_range | Возвращает истину, если IP-адрес пользователя (первая строка) соответствует указанным диапазонам IP-адресов (вторая строка). Работает только для анонимных пользователей. Поддерживает адреса IPv4 и IPv6. |
contains_any | Возвращает истину, если первая строка содержит какие-либо строки из следующих аргументов (неограниченное количество аргументов). |
substr | Возвращает часть первой строки по смещению от второго аргумента (начинается с 0) и максимальной длине от третьего аргумента (необязательно). |
strlen | То же, что и length . |
strpos | Возвращает числовую позицию первого появления иглы (вторая строка) в стоге сена (первая строка). Эта функция может вернуть 0, если иголка найдена в начале стога сена, поэтому другой оператор сравнения может принять это значение как ложное . Лучше использовать == или !== проверить, найден ли он. |
str_replace | Заменяет все вхождения строки поиска на заменяющую строку. Функция принимает 3 аргумента в следующем порядке: текст для поиска, текст для поиска, текст для замены. |
rescape | Возвращает аргумент с некоторыми символами, которым предшествует escape-символ "\", так что строка может использоваться в регулярном выражении без этих символов, имеющих особое значение. |
set | Устанавливает переменную (первая строка) с заданным значением (второй аргумент) для дальнейшего использования в фильтре. Другой синтаксис: .name := value |
set_var | То же, что и set . |
Действия, которые могут быть назначены в ответ на отфильтрованные изменения
Если пользователь активирует фильтр, фильтр редактирования может применить любую из следующих санкций в зависимости от серьезности нарушения:
- Все действия, запускающие фильтр, регистрируются на специальной странице.
- Действия пользователя могут быть помечены для дальнейшего просмотра.
- Пользователь может быть предупрежден о том, что его действия могут быть неконструктивными.
- Действие пользователя может быть запрещено.
- Автоподтвержденный статус пользователя может быть отозван (или отложен, если пользователь его не удерживает).
Следующие действия в настоящее время недоступны в этой вики:
- Учетная запись пользователя может быть заблокирована от редактирования вместе со всеми IP-адресами, использованными за последние 7 дней.
- Учетная запись пользователя может быть удалена из всех привилегированных групп (например, сисопа, бота, отката).
Примечание. Индивидуальные санкции можно отключить выборочно. Любой менеджер фильтров редактирования может восстановить автоматически подтвержденный статус в случае ошибки.
Предел условий
Предел условий - это ограничение, налагаемое программным обеспечением на общее количество условий, которые могут быть оценены фильтрами. Он произвольно установлен на уровне 1000. Хотя цель этого ограничения - избежать проблем с производительностью, следует отметить, что это не лучший показатель того, насколько тяжелый фильтр: например, фильтр, использующий десятки простых сравнений (и, следовательно, десятки условий), намного легче одного, используя единственную проверку all_links
переменной. См. Mw: Extension: AbuseFilter / Conditions и mw: Extension: AbuseFilter / Rules format # Performance для получения более подробной информации.
Мониторинг
Все изменения, запускающие действие, будут отражаться в отчете Special: AbuseLog . На этой странице вводится краткая запись журнала. Пользователи с соответствующими разрешениями могут просматривать сводку журнала. Пользователи с определенными более высокими разрешениями могут просматривать сведения в записи журнала. Сюда входит вся информация, доступная фильтру при его запуске, и она может быть полезна для целей отладки. Пользователи с наивысшим уровнем разрешений на просмотр журнала могут просматривать личные данные о действии, которое вызвало событие журнала, например IP-адрес пользователя. См. Документацию AbuseFilter для получения дополнительных сведений о структуре разрешений.
Образцы записей журнала злоупотреблений
- 06:43, 23 июня 2008 г .: Эндрю ( обсуждение | вклад | блок ) активировал фильтр злоупотреблений, внося изменения на главную страницу . Предпринятые действия: предупредить, запретить; Описание фильтра: Тестовый фильтр
- 06:43, 23 июня 2008 г .: Эндрю ( обсуждение | вклад | блок ) активировал фильтр злоупотреблений, внося изменения на главную страницу . Принятые меры: нет; Описание фильтра: Тестовый фильтр
Примеры подробных записей журнала злоупотреблений
- 06:43, 23 июня 2008: Эндрю ( обсуждение | вклад | блок ) активировал фильтр 1, внося изменения на главную страницу . Предпринятые действия: предупредить, запретить; Описание фильтра: Тестовый фильтр (подробности)
- 06:43, 23 июня 2008: Эндрю ( обсуждение | вклад | блок ) активировал фильтр 2, внося изменения на главную страницу . Принятые меры: нет; Описание фильтра: Тестовый фильтр (подробности)
- 06:42, 23 июня 2008: Эндрю ( обсуждение | вклад | блок ) активировал фильтр 1, внося изменения на главную страницу . Предпринятые действия: предупредить; Описание фильтра: Тестовый фильтр (подробности)
- 06:42, 23 июня 2008: Эндрю ( обсуждение | вклад | блок ) активировал фильтр 2, внося изменения на главную страницу . Принятые меры: нет; Описание фильтра: Тестовый фильтр (подробности)
- 06:22, 23 июня 2008: Эндрю ( обсуждение | вклад | блок ) активировал фильтр 1, внося изменения на главную страницу . Предпринятые действия: предупредить, запретить; Описание фильтра: Тестовый фильтр (подробности)
- 06:22, 23 июня 2008: Эндрю ( обсуждение | вклад | блок ) активировал фильтр 2, внося изменения на главную страницу . Принятые меры: нет; Описание фильтра: Тестовый фильтр (подробности)
Ссылка на подробности вызывает такой экран справа.
Гарантии
Чтобы защитить вики от плохо настроенных фильтров, на максимальный процент действий, запускающих данный фильтр, накладывается технический предел. Другие технические ограничения находятся в процессе написания.
Уведомление
Все уведомления основаны на шаблоне {{ edit filter warning }}.
Стандартные уведомления, показываемые пользователю, запускающему действие фильтра :
Имя сообщения | Текстовое сообщение |
---|---|
abusefilter-disallowed | |
abusefilter-autopromote-blocked |
Общее предупреждающее сообщение приведено ниже. Администраторам рекомендуется использовать настраиваемые предупреждения.
Имя сообщения | Текстовое сообщение |
---|---|
предупреждение о злоупотреблении |
Некоторые существующие фильтры и их предупреждения:
Фильтр и сообщение | Текстовое сообщение |
---|---|
30: большие удаления удаление | |
132: удаление всех категорий все категории удалены |
Если фильтр настроен на предупреждение и запрет, то пользователь, щелкнувший «Сохранить страницу», альтернативно увидит это предупреждение и стандартное сообщение о запрещении .
Рекомендации
- ^ Помните о phab: T29987
- ^ Помните о phab: T27619