Фильтр правок — различия между версиями

Материал из Мегапедии
Перейти к: навигация, поиск
м (Ссылки: шаблон)
Строка 1: Строка 1:
'''Фильтр правок''' (''Фильтр злоупотреблений'') — расширение движка [[MediaWiki]] «[[wr:AbuseFilter|AbuseFilter]]», предназначенное для автоматической проверки атрибутов действия на соответствие заданным администраторами правилам и принятия определенных ими мер отслеживания и пресечения. Этот механизм — своего рода продвинутая вариация ранее применявшихся в интернете концепций спам-листа и вордфильтра.
+
'''Фильтр правок''' (''Фильтр злоупотреблений'') — расширение движка [[MediaWiki]] «[[wr:AbuseFilter|AbuseFilter]]», предназначенное для автоматической проверки атрибутов действия на соответствие заданным [[администратор]]ами правилам и принятия определенных ими мер отслеживания и пресечения. Этот механизм — своего рода продвинутая вариация ранее применявшихся в интернете концепций [[спам-лист]]а и вордфильтра.
  
 
В настоящее время расширение включено во многих проектах фонда Викимедиа, включая крупнейший раздел Википедии — английский, а также на многих сайтах, контролируемых независимыми от фонда людьми, такими как [[Циклопедия]], [[Викиреальность]], [[ВикиФокус]] и др.
 
В настоящее время расширение включено во многих проектах фонда Викимедиа, включая крупнейший раздел Википедии — английский, а также на многих сайтах, контролируемых независимыми от фонда людьми, такими как [[Циклопедия]], [[Викиреальность]], [[ВикиФокус]] и др.
  
 
== История ==
 
== История ==
 +
 
=== Предпосылки ===
 
=== Предпосылки ===
 
До создания фильтра правок в MediaWiki уже существовали некоторые функции фильтрации нежелательного контента: например, запрет определенных фраз по регулярному выражению ($wgSpamRegex), защита страниц от редактирования и создания, расширения Username BlackList и Title BlackList. Однако, эти способны защиты имели существенные недостатки:
 
До создания фильтра правок в MediaWiki уже существовали некоторые функции фильтрации нежелательного контента: например, запрет определенных фраз по регулярному выражению ($wgSpamRegex), защита страниц от редактирования и создания, расширения Username BlackList и Title BlackList. Однако, эти способны защиты имели существенные недостатки:
* Регулярные выражения, определяемые в переменной, могли задавать только техники сайта. Помимо этого, проверялись только содержимое страницы и описание правки;
+
* [[Регулярные выражения]], определяемые в переменной, могли задавать только техники сайта. Помимо этого, проверялись только содержимое страницы и описание правки;
* Защита страниц накладывается только на отдельные названия, что позволяло вандалу легко обойти запрет, изменив всего несколько символов (см. HAGGER); каскадная защита, позволяющая защищать множество страниц, неэффективна и не может быть наложена на уровне ''autoconfirmed'';
+
* Защита страниц накладывается только на отдельные названия, что позволяло вандалу легко обойти запрет, изменив всего несколько символов (см. [[HAGGER]]); каскадная защита, позволяющая защищать множество страниц, неэффективна и не может быть наложена на уровне ''[[autoconfirmed]]'';
* Username BlackList и Title BlackList наиболее близко подошли к уровню фильтра правок, позволяя запрещать названия страниц от создания и редактирования, а также некоторые имена учетных записей. Однако, все эти запреты находились на публичной страницы, что создавало проблему сокрытия личных данных, а также существенно упрощало процесс преодоления наложенных ограничений.
+
* Username BlackList и Title BlackList наиболее близко подошли к уровню фильтра правок, позволяя запрещать названия страниц от создания и редактирования, а также некоторые имена учетных записей. Однако, все эти запреты находились на публичной страницы, что создавало проблему сокрытия [[Личные данные|личных данных]], а также существенно упрощало процесс преодоления наложенных ограничений.
  
 
=== Разработка расширения ===
 
=== Разработка расширения ===
Основной автор расширения — один из разработчиков MediaWiki Andrew Garrett, работающий под ником «Werdna». Помощь в разработке расширения оказывали River Tarnell и Victor Vasiliev (реализовал использование в фильтрах регулрных выражений, тем самым серьезно увеличив их эффективность).
+
Основной автор расширения — один из разработчиков MediaWiki Andrew Garrett, работающий под ником «Werdna». Помощь в разработке расширения оказывали River Tarnell и [[VasilievVV|Victor Vasiliev]] (реализовал использование в фильтрах регулярных выражений, тем самым серьезно увеличив их эффективность).
  
Документация расширения была опубликована на сайте MediaWiki 27 июня 2008 года [http://www.mediawiki.org/w/index.php?title=Extension:AbuseFilter&oldid=197559]. В этот же день оно было добавлено в репозиторий MediaWiki [http://www.mediawiki.org/w/index.php?title=Special:Code/MediaWiki&dir=prev&path=%2Ftrunk%2Fextensions%2FAbuseFilter]. По состоянию на октябрь 2011 года, в расширении почти не делается серьезных изменений, большая часть коммитов — обновление интернационализации [http://www.peeep.us/ae2cc348].
+
Документация расширения была опубликована на сайте MediaWiki [[27 июня]] [[2008 год]]а [http://www.mediawiki.org/w/index.php?title=Extension:AbuseFilter&oldid=197559]. В этот же день оно было добавлено в репозиторий MediaWiki [http://www.mediawiki.org/w/index.php?title=Special:Code/MediaWiki&dir=prev&path=%2Ftrunk%2Fextensions%2FAbuseFilter]. По состоянию на октябрь [[2011 год]]а, в расширении почти не делается серьезных изменений, большая часть коммитов — обновление интернационализации [http://www.peeep.us/ae2cc348].
  
По состоянию на 1.17 в расширении присутствует убогое API, позволяющее только просматривать журнал срабатываний и информацию о списке фильтров. В нестабильных версиях, однако, уже присутствуют функции, реализующие расширенные возможности работы с фильтром правок (проверка синтаксиса выражения, проверка соответствия фильтра и правки) [http://www.peeep.us/54509923]. Тем не менее, полноценная работа с фильтром через API на данный момент невозможна.
+
По состоянию на версию MediaWiki 1.17 в расширении присутствует убогое [[API]], позволяющее только просматривать журнал срабатываний и информацию о списке фильтров. В нестабильных версиях, однако, уже присутствуют функции, реализующие расширенные возможности работы с фильтром правок (проверка синтаксиса выражения, проверка соответствия фильтра и правки) [http://www.peeep.us/54509923]. Тем не менее, полноценная работа с фильтром через API на данный момент невозможна.
  
 
В настоящий момент сделано около тысячи коммитов расширения, большая часть которых заключается в обновлении языкового файла, осуществляемое в полуавтоматическом режиме.
 
В настоящий момент сделано около тысячи коммитов расширения, большая часть которых заключается в обновлении языкового файла, осуществляемое в полуавтоматическом режиме.
  
 
=== Внедрение в вики-проектах ===
 
=== Внедрение в вики-проектах ===
В проектах фонда Викимедиа расширение включено на Мете, MediaWiki.org и Викискладе, в 38 языковых разделах Википедии, 2 разделах Викисловаря, 6 разделах Викиучебника, 3 разделах Викицитатника, 3 разделах Викиновостей и 4 разделах Викитеки. Для конфигурации расширения выделен отдельный файл [http://noc.wikimedia.org/conf/highlight.php?file=abusefilter.php].
+
В проектах фонда Викимедиа расширение включено на Мете, [[MediaWiki.org]] и [[Викисклад]]е, в 38 языковых разделах Википедии, 2 разделах Викисловаря, 6 разделах Викиучебника, 3 разделах Викицитатника, 3 разделах Викиновостей и 4 разделах Викитеки. Для конфигурации расширения выделен отдельный файл [http://noc.wikimedia.org/conf/highlight.php?file=abusefilter.php].
  
На 28 проектах расширение было подключено в 2009 году, на 11 — в 2010, на 13 — в 2011 [http://meta.wikimedia.org/wiki/AbuseFilter].
+
На 28 проектах расширение было подключено в [[2009 год]]у, на 11 — в [[2010]], на 13 — в 2011 [http://meta.wikimedia.org/wiki/AbuseFilter].
  
В русской Википедии по состоянию на октябрь 2011 года 71 действующий фильтр, 11 отключенных и 56 удаленных. В английской Википедии 93 действующих фильтра, 55 отключенных и 286 удаленных.
+
В [[Русская Википедия|русской Википедии]] по состоянию на октябрь 2011 года 69 действующих фильтров, 12 отключенных и 65 удаленных. В английской Википедии 96 действующих фильтров, 67 отключенных и 337 удаленных.
  
В других русскоязычных вики-проектах фильтры правок стали внедряться в основном после его внедрения в разделе Википедии на русском языке. В Викиреальности фильтр правок был подключен летом 2009 года, однако практически не использовался до 2010 года. В Циклопедии расширение находилось с момента ее публичного открытия. В Антикопирайте оно было установлено в январе 2011 года после атаки Сыя. В Новопедии расширение было подключено перед публичным открытием проекта, в Зелевопедии — в первый день после ее создания.
+
В других русскоязычных вики-проектах фильтры правок стали внедряться в основном после его внедрения в разделе Википедии на русском языке. В Викиреальности фильтр правок был подключен летом 2009 года, однако практически не использовался до 2010 года. В Циклопедии расширение находилось с момента ее публичного открытия. В [[Антикопирайт]]е оно было установлено в январе 2011 года после атаки [[Сый|Сыя]]. В [[Новопедия|Новопедии]] и [[Викилогия|Викилогии]] расширение было подключено перед публичным открытием проекта, в [[Зелевопедия|Зелевопедии]] — в первый день после ее создания.
  
В этих проектах обычно используется около 10-15 работающих фильтров, количество и жесткость варьируется в зависимости от уровня угрозы вандализма и провокаций.
+
В этих проектах обычно используется около 10-15 работающих фильтров, количество и жесткость варьируется в зависимости от уровня угрозы [[вандализм]]а и провокаций.
  
Из англоязычных вики-проектов попытка внедрения была предпринята на 1d4chan.org после сильной атаки дятла, однако несмотря на наличие расширения оно не использовалось, по всей видимости из-за недостаточной квалификации единственного администратора и техника проекта и его нежелания назначать других администраторов.
+
Из англоязычных вики-проектов попытка внедрения была предпринята на [[1d4chan.org]] после сильной атаки [[Дятел (викисреда)|дятла]], однако несмотря на наличие расширения оно не использовалось, по всей видимости из-за недостаточной квалификации единственного администратора и техника проекта и его нежелания назначать других администраторов.
  
 
== Механизм работы ==
 
== Механизм работы ==
 +
 
=== Идентификаторы ===
 
=== Идентификаторы ===
 
Каждый фильтр обладает уникальным ''auto-increment'' идентификатором, а также задаваемым фильтрописателем названием (которое может быть пустым, а также дублировать название другого фильтра). Название является публичным, оно отображается в списке всех фильтров, при его срабатывании, а также в комментарии к действиям, осуществляемым фильтрами.
 
Каждый фильтр обладает уникальным ''auto-increment'' идентификатором, а также задаваемым фильтрописателем названием (которое может быть пустым, а также дублировать название другого фильтра). Название является публичным, оно отображается в списке всех фильтров, при его срабатывании, а также в комментарии к действиям, осуществляемым фильтрами.
  
В отношении определения названия фильтров правок есть два радикально разных подхода: согласно первому из них называть фильтры необходимо так, чтобы при их срабатывании пользователь мог понять, в чем заключается ошибочность его действия, названия таких фильтров содержат достаточно подробное описание заложенных принципов фильтрации; однако, в отношении заведомо «плохих» пользователь такой подход является контрпродуктивным, поэтому отсюда берет начало второй принцип: фильтр содержат крайне расплывчатое название, не позволяющее понять никаких деталей (например, «Вандализм-1», «Вандализм-2» и т. д.)
+
В отношении определения названия фильтров правок есть два радикально разных подхода: согласно первому из них называть фильтры необходимо так, чтобы при их срабатывании пользователь мог понять, в чем заключается ошибочность его действия, названия таких фильтров содержат достаточно подробное описание заложенных принципов фильтрации; однако, в отношении заведомо «плохих» пользователь такой подход является контрпродуктивным, поэтому отсюда берет начало второй принцип: фильтр содержат крайне расплывчатое название, не позволяющее понять никаких деталей (например, «Вандализм-1», «Вандализм-2», «[[Троллинг]]», «Омский дятел», «Конюшня» и т. д.)
  
 
=== Синтаксис фильтров ===
 
=== Синтаксис фильтров ===
Каждый фильтр представляет собой набор правил, написанных на специальном псевдоязыке, манипулирующем стандартными операторами («больше», «меньше», «равно», «содержит», «совпадение по регулярному выражению» и т. д.) и переменными, автоматически получаемыми фильтром правок для каждого обрабатываемого действия. В переменные входит: имя участника, список последних авторов страницы, старый и новый текст страницы в разных форматах, добавленные и удаленные строки и т. д. Операторы «и» и «или» позволяют использовать в одном фильтре несколько условий. К переменным можно применять модификаторы, такие как ''lcase'' (переводит строку в нижний регистр), ''length'' (возвращает длину строки в символах), ''ccnorm'' (нормализация строки) и т. д.
+
Каждый фильтр представляет собой набор правил, написанных на специальном псевдоязыке, манипулирующем стандартными операторами («больше», «меньше», «равно», «содержит», «совпадение по регулярному выражению» и т. д.) и переменными, автоматически получаемыми фильтром правок для каждого обрабатываемого действия. В переменные входит: имя участника, список последних авторов страницы, старый и новый текст страницы в разных форматах, добавленные и удаленные строки и т. д. Операторы «и» и «или» позволяют использовать в одном фильтре несколько условий. К переменным можно применять модификаторы, такие как ''lcase'' (переводит строку в нижний регистр), ''length'' (возвращает длину строки в символах), ''ccnorm'' (нормализация строки) и т. д.
  
 
Написание фильтров требует хорошего знания этого языка и грамотного просчета всех возможных ''false positives'', ошибочных срабатываний (например, запрет оскорбительного слова «бл%» может повлечь запрет и слова «потреблять»). В идеале фильтр должен отклонять все злонамеренные правки, пропуская при этом добросовестные. Однако, в силу сложности точного определения границы и изобретательности нарушителей, программист фильтров должен балансировать между возможностями «пропустить вандализм» и «отклонить нормальную правку». В случае серьезной необходимости и невозможности точной отладки фильтров, их намеренно делают такими, что они могут отклонять и нормальные правки, обеспечивая тем не менее хорошую защиту от плохих правок.
 
Написание фильтров требует хорошего знания этого языка и грамотного просчета всех возможных ''false positives'', ошибочных срабатываний (например, запрет оскорбительного слова «бл%» может повлечь запрет и слова «потреблять»). В идеале фильтр должен отклонять все злонамеренные правки, пропуская при этом добросовестные. Однако, в силу сложности точного определения границы и изобретательности нарушителей, программист фильтров должен балансировать между возможностями «пропустить вандализм» и «отклонить нормальную правку». В случае серьезной необходимости и невозможности точной отладки фильтров, их намеренно делают такими, что они могут отклонять и нормальные правки, обеспечивая тем не менее хорошую защиту от плохих правок.
Строка 48: Строка 50:
 
* <code>!('editor' in user_groups) & (user_editcount < 10) & (added_lines rlike 'у[рд]од')</code>
 
* <code>!('editor' in user_groups) & (user_editcount < 10) & (added_lines rlike 'у[рд]од')</code>
  
Данный фильтр вначале проверяет наличие флага «editor» и не срабатывает, если он присутствует; затем он проверяет число правок, срабатывая только на пользователей, у которых их меньше 10; затем проверяются добавленные строки на предмет соответствия ''case-sensitive'' регулярному выражению «/у[рд]од/» — то есть он сработает на слова «урод» или «удод».
+
Данный фильтр вначале проверяет наличие флага «[[editor]]» и не срабатывает, если он присутствует; затем он проверяет число правок, срабатывая только на пользователей, у которых их меньше 10; затем проверяются добавленные строки на предмет соответствия ''case-sensitive'' регулярному выражению «/у[рд]од/» — то есть он сработает на слова «урод» или «удод».
  
 
=== Процессинг действий ===
 
=== Процессинг действий ===
При совершении пользователем действия, оно проверяется на предмет соответствия каждому из включенных на момент совершения фильтров, причем даже если условиями первого из них оно было отклонено, оно продолжает проверяться далее, в журнал срабатываний пишутся все срабатывания.
+
При совершении пользователем действия, оно проверяется на предмет соответствия каждому из включенных на момент совершения фильтров, причем даже если условиями первого из них оно было отклонено, оно продолжает проверяться далее, в [[Журнал срабатываний фильтров|журнал срабатываний]] пишутся все срабатывания.
  
 
Так как при обработке фильтра интерпретатор поочередно проверяет верность заданных выражений и прекращает обработку фильтра после того, как хоть одно из обязательных условий отдало false, возможна оптимизация фильтров: помещение в его начале общих правил, которые позволяют сильно сузить круг срабатывания (например, число правок), а только затем ресурсоемких специфических правил.
 
Так как при обработке фильтра интерпретатор поочередно проверяет верность заданных выражений и прекращает обработку фильтра после того, как хоть одно из обязательных условий отдало false, возможна оптимизация фильтров: помещение в его начале общих правил, которые позволяют сильно сузить круг срабатывания (например, число правок), а только затем ресурсоемких специфических правил.
  
 
=== Обработка личных данных ===
 
=== Обработка личных данных ===
Фильтр не позволяет как-либо обрабатывать в теле условий IP-адреса зарегистрированных пользователей, например запрещая регистрации с определенного диапазона. Обработка IP-адресов возможна только у анонимных участников. Иная личная информация (User-Agent, параметры браузера и заголовки запроса) не обрабатываются.
+
Фильтр не позволяет как-либо обрабатывать в теле условий [[IP-адрес]]а зарегистрированных пользователей, например запрещая регистрации с определенного диапазона. Обработка IP-адресов возможна только у анонимных участников. Иная личная информация ([[User-Agent]], параметры браузера и заголовки запроса) не обрабатываются.
  
Фильтр записывает IP-адреса всех пользователей, включая зарегистрированных, в раздел «Приватные данные», отображающийся внизу страницы отображения данных о срабатывании фильтра для пользователей, имеющих право просмотра личных данных в журнале злоупотреблений. Отображается только последний адрес в цепочке, не отображаются XFF-заголовки.
+
Фильтр записывает IP-адреса всех пользователей, включая зарегистрированных, в раздел «Приватные данные», отображающийся внизу страницы отображения данных о срабатывании фильтра для пользователей, имеющих право просмотра личных данных в журнале злоупотреблений. Отображается только последний адрес в цепочке, не отображаются [[XFF]]-заголовки.
  
Просмотреть IP-адреса участников при помощи функции проверки переменных всех свежих правок невозможно.  
+
Просмотреть IP-адреса участников при помощи функции проверки переменных всех свежих правок невозможно.
  
 
=== Видимость ===
 
=== Видимость ===
 
Каждый из фильтров правок может быть ''публичным'' (может быть просмотрен участником с базовым правом просмотра фильтра правок, часто выдаваемым широкому кругу участников или даже всем участникам) и ''приватным'' (просмотр может производиться только участниками с правом просмотра закрытых фильтров или правом изменения фильтров).
 
Каждый из фильтров правок может быть ''публичным'' (может быть просмотрен участником с базовым правом просмотра фильтра правок, часто выдаваемым широкому кругу участников или даже всем участникам) и ''приватным'' (просмотр может производиться только участниками с правом просмотра закрытых фильтров или правом изменения фильтров).
  
Таким образом, ''публичными'' обычно отмечают фильтры, содержимое которых не имеет смысл скрывать, например фильтры, проверяющие способ добавления новой темы на странице обсуждения, отслеживающие создание категории без надкатегории, правку шапки форума и т. д., то есть против действий, которые обычно совершаются новичками или мало вошедшими в тему вики-проекта участниками, не имеющими злых намерений. ''Закрытыми'' отмечаются фильтры против явно злонамеренных действий, при помощи которых нарушитель может значительно упростить обход поставленных ограничений, а также фильтры, содержащие в себе личные данные.
+
Таким образом, ''публичными'' обычно отмечают фильтры, содержимое которых не имеет смысл скрывать, например фильтры, проверяющие способ добавления новой темы на [[Страница обсуждения|странице обсуждения]], отслеживающие создание категории без надкатегории, правку шапки форума и т. д., то есть против действий, которые обычно совершаются новичками или мало вошедшими в тему вики-проекта участниками, не имеющими злых намерений. ''Закрытыми'' отмечаются фильтры против явно злонамеренных действий, при помощи которых нарушитель может значительно упростить обход поставленных ограничений, а также фильтры, содержащие в себе личные данные.
  
 
Срабатывания всех фильтров, вне зависимости от их настроек видимости, записываются в публичный журнал срабатываний.
 
Срабатывания всех фильтров, вне зависимости от их настроек видимости, записываются в публичный журнал срабатываний.
  
 
=== Меры ===
 
=== Меры ===
Меры, принимаемые фильтром, разнятся от логгирования срабатывания фильтра без каких-либо помех совершению правки до бессрочной блокировки подсети класса B и снятия всех технических флагов. В отличие от механизмов фильтрации некоторых других сайтов, фильтр не позволяет осуществлять автозамены слов в размещаемом пользователем тексте.
+
Меры, принимаемые фильтром, разнятся от логгирования срабатывания фильтра без каких-либо помех совершению правки до [[Бессрочная блокировка|бессрочной блокировки]] подсети класса B и снятия всех технических флагов. В отличие от механизмов фильтрации некоторых других сайтов, фильтр не позволяет осуществлять автозамены слов в размещаемом пользователем тексте.
  
Сисадмин сервера определяет меры, которые может выбирать администратор при создании фильтра. Как правило, отключаются меры блокирования пользователя и IP-подсети, а также снятие всех прав — такие фильтры потенциально опасны при попадании учетной записи администратора в руки вандалов или недобросовестных намерений самого администратора (например, он может определить снятие флагов и блок при первой правке бюрократа вики-проекта, после чего сможет значительно навандалить, не встречая сопротивления).
+
Системный администратор сервера определяет меры, которые может выбирать администратор при создании фильтра. Как правило, отключаются меры блокирования пользователя и IP-подсети, а также снятие всех прав — такие фильтры потенциально опасны при попадании учетной записи администратора в руки вандалов или недобросовестных намерений самого администратора (например, он может определить снятие флагов и блок при первой правке бюрократа вики-проекта, после чего сможет значительно навандалить, не встречая сопротивления).
  
 
Также возможные меры делятся на общие и ограниченные (''restricted''), последние может использовать только администратор со специальными правами. Эта функция предназначена для обеспечения большей безопасности работы с механизмом. Ограниченными по умолчанию являются действия выше «отклонения».
 
Также возможные меры делятся на общие и ограниченные (''restricted''), последние может использовать только администратор со специальными правами. Эта функция предназначена для обеспечения большей безопасности работы с механизмом. Ограниченными по умолчанию являются действия выше «отклонения».
Строка 83: Строка 85:
 
Работа с различными механизмами фильтра правок ограничивается целым набором прав доступа, которые позволяют гибко настраивать права для совершения различных действий. В настоящее время AbuseFilter насчитывает 10 прав, начинающихся с ''abusefilter-'' [http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/AbuseFilter/AbuseFilter.php]. По умолчанию эти права не определены и должны быть определены пользователем во время установки фильтров, пример возможной конфигурации приводится на странице расширения.
 
Работа с различными механизмами фильтра правок ограничивается целым набором прав доступа, которые позволяют гибко настраивать права для совершения различных действий. В настоящее время AbuseFilter насчитывает 10 прав, начинающихся с ''abusefilter-'' [http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/AbuseFilter/AbuseFilter.php]. По умолчанию эти права не определены и должны быть определены пользователем во время установки фильтров, пример возможной конфигурации приводится на странице расширения.
  
Права можно разделить на те, которые управляют доступом на просмотр информации (''abusefilter-view'' просмотр публичных фильтров; ''abusefilter-view-private'' просмотр закрытых фильтров; ''abusefilter-log'' просмотр журнала; ''abusefilter-log-detail'' просмотр деталей срабатываний; ''abusefilter-private'' просмотр личной информации; ''abusefilter-hidden-log'' просмотр скрытых записей журнала) и те, которые определяют доступ к совершению изменений (''abusefilter-modify'' — изменение фильтров; ''abusefilter-modify-restricted'' использование ограниченных мер пресечения; ''abusefilter-hide-log'' — скрытие записей в журнале).
+
Права можно разделить на те, которые управляют доступом на просмотр информации (''abusefilter-view'' — просмотр публичных фильтров; ''abusefilter-view-private'' — просмотр закрытых фильтров; ''abusefilter-log'' — просмотр журнала; ''abusefilter-log-detail'' — просмотр деталей срабатываний; ''abusefilter-private'' — просмотр личной информации; ''abusefilter-hidden-log'' — просмотр скрытых записей журнала) и те, которые определяют доступ к совершению изменений (''abusefilter-modify'' — изменение фильтров; ''abusefilter-modify-restricted'' — использование ограниченных мер пресечения; ''abusefilter-hide-log'' — скрытие записей в журнале).
  
На практике права обычно распределяются между группами (все)/редакторы, администраторы, чекюзеры, ревизоры. В некоторых конфигурациях (Викиреальность, Антикопирайт) просмотр даже публичных фильтров разрешен только администраторам, в других (многие разделы Википедии) просматривать даже подробный лог может любой аноним.
+
На практике права обычно распределяются между группами (все)/редакторы, администраторы, [[чекюзер]]ы, [[ревизор]]ы. В некоторых конфигурациях (Викиреальность, Антикопирайт) просмотр даже публичных фильтров разрешен только администраторам, в других (многие разделы Википедии) просматривать даже подробный лог может любой аноним.
  
 
=== Интерфейс ===
 
=== Интерфейс ===
 +
 
==== Служебная страница ====
 
==== Служебная страница ====
 
Основной страницей, при помощи которой обеспечивается большая часть взаимодействия пользователя с расширением, является служебная страница AbuseFilter. Различные функции, которые можно вызывать через расширение, в интерфейсе представлены в виде условных подстраниц, каждая из которых может обладать собственными настройками прав доступа. На заглавной странице содержится список подстраниц, перечисление включенных и отключенных фильтров, краткое описание механизма и статистические данные по числу срабатываний.
 
Основной страницей, при помощи которой обеспечивается большая часть взаимодействия пользователя с расширением, является служебная страница AbuseFilter. Различные функции, которые можно вызывать через расширение, в интерфейсе представлены в виде условных подстраниц, каждая из которых может обладать собственными настройками прав доступа. На заглавной странице содержится список подстраниц, перечисление включенных и отключенных фильтров, краткое описание механизма и статистические данные по числу срабатываний.
  
 
Подстраницы фильтра правок:
 
Подстраницы фильтра правок:
* '''Последние изменения фильтров''' (''history'') реализует журнал изменений фильтров, представленный, в отличие от стандартных журналов MediaWiki, в виде таблицы, содержащей в себе данные о промежуточных и окончательных изменениях в фильтрах. Если пользователь не может просматривать закрытые фильтры, на этой странице он увидит только изменения публичных фильтров.
+
* '''[[Последние изменения фильтров]]''' (''history'') — реализует журнал изменений фильтров, представленный, в отличие от стандартных журналов MediaWiki, в виде таблицы, содержащей в себе данные о промежуточных и окончательных изменениях в фильтрах. Если пользователь не может просматривать закрытые фильтры, на этой странице он увидит только изменения публичных фильтров.
* '''Пакетное тестирование''' (''test'') позволяет проверить набор условий фильтрации на наличие совпадений, не сохраняя его в качестве фильтра. Проверяются последние уже сделанные свежие правки. Возможно проверить изменения, сделанные определенным участником; на определенной странице; в определенное время.
+
* '''[[Пакетное тестирование]]''' (''test'') — позволяет проверить набор условий фильтрации на наличие совпадений, не сохраняя его в качестве фильтра. Проверяются последние уже сделанные свежие правки. Возможно проверить изменения, сделанные определенным участником; на определенной странице; в определенное время.
* '''Изучение последних правок''' (''examine'') позволяет просмотреть последние правки в вики-проекте и все их переменные, за исключением IP-адреса, как если бы они попали в фильтр правок;
+
* '''[[Изучение последних правок]]''' (''examine'') — позволяет просмотреть последние правки в вики-проекте и все их переменные, за исключением IP-адреса, как если бы они попали в фильтр правок;
* '''Средства отладки''' (''tools'') позволяет определить соответствие синтаксису написанного условия фильтрации, а также позволяет восстановить статус автоподтверждения участнику, у которого он был снят в результате ошибочного срабатывания фильтра.
+
* '''[[Средства отладки]]''' (''tools'') — позволяет определить соответствие синтаксису написанного условия фильтрации, а также позволяет восстановить статус автоподтверждения участнику, у которого он был снят в результате ошибочного срабатывания фильтра.
* '''Импорт фильтра''' (''import'') интерфейс для передачи фильтров правок между проектами: в исходном проекте фильтр сохраняется в виде ассоциативного массива, после чего этот массив копируется на новый сервер; автоматического импорта фильтра не происходит — эта функция позволяет только произвести автозаполнение полей создания нового фильтра правок.
+
* '''[[Импорт фильтра]]''' (''import'') — интерфейс для передачи фильтров правок между проектами: в исходном проекте фильтр сохраняется в виде ассоциативного массива, после чего этот массив копируется на новый сервер; автоматического импорта фильтра не происходит — эта функция позволяет только произвести автозаполнение полей создания нового фильтра правок.
  
''examine'' позволяет просмотреть параметры для любой правки в проекте, включая скрытые на уровне «ревизор», даже если просматривающий администратор не обладает этим флагом — в таком случае на странице не будет доступен скрытый текст, но останется видно имя участника, в том числе если оно было скрыто.
+
''examine'' позволяет просмотреть параметры для любой правки в проекте, включая скрытые на уровне «ревизор», даже если просматривающий администратор не обладает этим флагом — в таком случае на странице не будет доступен скрытый текст, но останется видно имя участника, в том числе если оно было скрыто.
  
 
==== Журнал срабатываний ====
 
==== Журнал срабатываний ====
Строка 105: Строка 108:
 
Расширенный просмотр позволяет посмотреть все переменные, которые были созданы для этого срабатывания, а также последний IP-адрес попавшего в фильтр пользователя, если просматривающий участник имеет соответствующее право доступа.
 
Расширенный просмотр позволяет посмотреть все переменные, которые были созданы для этого срабатывания, а также последний IP-адрес попавшего в фильтр пользователя, если просматривающий участник имеет соответствующее право доступа.
  
До некоторого момента записи в этом журнале нельзя было скрыть или удалить, в связи с чем в некоторых англоязычных антивикипедийных источниках это отмечалось как серьезный недостаток и новый вид вандализма — размещение таким образом личной информации, которую невозможно будет скрыть. Затем было выпущено изменение, теперь администраторы с правами ревизоров могут скрывать отдельные записи их журнала срабатываний фильтров (запись помечается как «скрытая» и видна только ревизорам, запись о сокрытии пишется в обычный журнал сокрытий).
+
До некоторого момента записи в этом журнале нельзя было скрыть или удалить, в связи с чем в некоторых англоязычных антивикипедийных источниках это отмечалось как серьезный недостаток и новый вид вандализма — размещение таким образом личной информации, которую невозможно будет скрыть. Затем было выпущено изменение, теперь администраторы с правами ревизоров могут скрывать отдельные записи из журнала срабатываний фильтров (запись помечается как «скрытая» и видна только ревизорам, запись о сокрытии пишется в обычный журнал сокрытий).
  
 
==== Журнал изменений фильтров ====
 
==== Журнал изменений фильтров ====
Строка 118: Строка 121:
 
Всю информацию фильтр правок хранит в нескольких таблицах, создаваемых при его установке:
 
Всю информацию фильтр правок хранит в нескольких таблицах, создаваемых при его установке:
 
* ''abuse_filter'' — информация о существующих фильтрах правок и их параметры;
 
* ''abuse_filter'' — информация о существующих фильтрах правок и их параметры;
* ''abuse_filter_history'' история изменений фильтров правок;
+
* ''abuse_filter_history'' — история изменений фильтров правок;
* ''abuse_filter_log'' журнал срабатываний фильтров.
+
* ''abuse_filter_log'' — журнал срабатываний фильтров.
  
 
Метки, которые фильтр может присваивать отдельным действиям, хранятся в таблице ''change_tag''. Список существующих меток содержится в ''valid_tag''.
 
Метки, которые фильтр может присваивать отдельным действиям, хранятся в таблице ''change_tag''. Список существующих меток содержится в ''valid_tag''.
  
 
== Социальная сторона ==
 
== Социальная сторона ==
 +
 
=== Некорректные срабатывания ===
 
=== Некорректные срабатывания ===
В связи с рассмотренной выше невозможностью достичь совершенства фильтров они иногда вызывают некорректные срабатывания, запрещая совершать правки, совершенные с добрыми намерениями. При большом числе подобных срабатываний сайт может получить репутацию «тотально огороженного», на котором не рекомендуется править. Радикально настроенные участники могут заявлять, что такой сайт «находится в БАО».
+
В связи с рассмотренной выше невозможностью достичь совершенства фильтров они иногда вызывают некорректные срабатывания, запрещая совершать правки, совершенные с добрыми намерениями. При большом числе подобных срабатываний сайт может получить репутацию «тотально огороженного», на котором не рекомендуется править. Радикально настроенные участники могут заявлять, что такой сайт «находится в [[БАО]]».
  
Аноним или новый участник, не имеющий представления о предназначении фильтра правок, действие которого было запрещено срабатыванием фильтра, может прекратить править сайт, особенно если срабатывание произошло при первой попытке на невинное действие.
+
[[Аноним]] или новый участник, не имеющий представления о предназначении фильтра правок, действие которого было запрещено срабатыванием фильтра, может прекратить править сайт, особенно если срабатывание произошло при первой попытке на невинное действие.
  
 
Для смягчения последствий некорректных срабатываний администраторы могут просматривать журнал фильтра правок, давать пояснения и корректировать ошибки, собственноручно вносить в вики отклоненные нормальные правки с корректной атрибуцией авторства правки.
 
Для смягчения последствий некорректных срабатываний администраторы могут просматривать журнал фильтра правок, давать пояснения и корректировать ошибки, собственноручно вносить в вики отклоненные нормальные правки с корректной атрибуцией авторства правки.
Строка 134: Строка 138:
 
Так как написание фильтров является достаточно сложной интеллектуальной работой, а также в силу склонности ряда википедистов к общению и поиску признания, активные и грамотные фильтрописатели могут объединяться в группы и использовать средства внепроектного общения (почтовые рассылки, мессенджеры) для обсуждения фильтров (в том числе закрытых, которые принципиально невозможно полноценно обсуждать на открытых страницах вики-проекта).
 
Так как написание фильтров является достаточно сложной интеллектуальной работой, а также в силу склонности ряда википедистов к общению и поиску признания, активные и грамотные фильтрописатели могут объединяться в группы и использовать средства внепроектного общения (почтовые рассылки, мессенджеры) для обсуждения фильтров (в том числе закрытых, которые принципиально невозможно полноценно обсуждать на открытых страницах вики-проекта).
  
Практической пользой от такой кооперации является взаимообмен знаниями между фильтрописателями, более эффективное совершенствование и написание фильтров, более быстрый отлов ошибок. В качестве негативных моментов некоторые могут называть возможность сговора между авторами фильтров и взаимопокрытия совершенный нарушений.
+
Практической пользой от такой кооперации является взаимообмен знаниями между фильтрописателями, более эффективное совершенствование и написание фильтров, более быстрый отлов ошибок. В качестве негативных моментов некоторые могут называть возможность сговора между авторами фильтров и взаимопокрытия совершенных нарушений.
  
 
=== Информация закрытых фильтров ===
 
=== Информация закрытых фильтров ===
Строка 144: Строка 148:
  
 
=== Ограничения опытных участников ===
 
=== Ограничения опытных участников ===
Несмотря на то, что основное назначение фильтра правок — защита от вандализма и провокаций неопытных участников, он может использоваться и для наложения ограничений на любого из опытных участников, не имеющих право редактирования фильтров. То есть, например, администрация проекта, недовольная действиями какого-то очевидно добросовестного, но в чем-то ведущего себя некорректно участника, может запретить ему при помощи фильтра совершать некоторые действия, что во многих случаях может вызвать его недовольство.
+
Несмотря на то, что основное назначение фильтра правок — защита от вандализма и провокаций неопытных участников, он может использоваться и для наложения ограничений на любого из опытных участников, не имеющих право редактирования фильтров. То есть, например, администрация проекта, недовольная действиями какого-то очевидно добросовестного, но в чем-то ведущего себя некорректно участника, может запретить ему при помощи фильтра совершать некоторые действия, что во многих случаях может вызвать его недовольство. В альтернативных вики-проектах известно несколько таких случаев.
  
 
Активный участник, долгое время работавший в вики-проекте согласно принципу ''вики'' оказывается задет тем, что администраторы мешают ему осуществлять свое творчество, и, как результат, может покинуть проект в знак протеста или заняться деструктивной деятельностью.
 
Активный участник, долгое время работавший в вики-проекте согласно принципу ''вики'' оказывается задет тем, что администраторы мешают ему осуществлять свое творчество, и, как результат, может покинуть проект в знак протеста или заняться деструктивной деятельностью.
Строка 151: Строка 155:
  
 
== Противодействие ==
 
== Противодействие ==
 +
 
=== Торпедирование включения ===
 
=== Торпедирование включения ===
 
Противодействие использованию фильтров правок может исходить не со стороны нарушителей, а со стороны добросовестных или кажущихся таковыми членов сообщества вики-проектов. Эта их позиция может быть продиктована несколькими причинами:
 
Противодействие использованию фильтров правок может исходить не со стороны нарушителей, а со стороны добросовестных или кажущихся таковыми членов сообщества вики-проектов. Эта их позиция может быть продиктована несколькими причинами:
Строка 160: Строка 165:
 
=== Обход фильтров ===
 
=== Обход фильтров ===
 
{{main|Обход фильтра правок}}
 
{{main|Обход фильтра правок}}
Создание механизма фильтра правок является значительным достижением в защите сайтов на основе MediaWiki, позволяя при наличии грамотного фильтрописателя или исходного кода фильтров защищать его от многих угроз и существенно снижать эффективность вандализма, троллинга и спама.
+
Создание механизма фильтра правок является значительным достижением в защите сайтов на основе MediaWiki, позволяя при наличии грамотного фильтрописателя или исходного кода фильтров защищать его от многих угроз и существенно снижать эффективность вандализма, троллинга и [[спам]]а.
  
 
Однако создание фильтра правок не является безусловной победой в «борьбе брони и снаряда» — злонамеренные пользователи, применяя экспериментальный способ, могут обходить написанные фильтры правок, вынуждая администрацию продолжать постоянно следить за правками и журналами срабатываний (чего бы не требовалось в случае написания «идеальных фильтров», отклоняющих 100 % вредоносных действий и не срабатывающих на добросовестные, которые являются на данный момент недостижимыми, так как достоверно определить добросовестность действия может только человек или не существующий в настоящее время [[искусственный интеллект]]) или все более усложнять фильтры, повышая шанс попадания в них нормальных правок.
 
Однако создание фильтра правок не является безусловной победой в «борьбе брони и снаряда» — злонамеренные пользователи, применяя экспериментальный способ, могут обходить написанные фильтры правок, вынуждая администрацию продолжать постоянно следить за правками и журналами срабатываний (чего бы не требовалось в случае написания «идеальных фильтров», отклоняющих 100 % вредоносных действий и не срабатывающих на добросовестные, которые являются на данный момент недостижимыми, так как достоверно определить добросовестность действия может только человек или не существующий в настоящее время [[искусственный интеллект]]) или все более усложнять фильтры, повышая шанс попадания в них нормальных правок.
Строка 167: Строка 172:
 
При наличии в вики-проекте достаточного количества включенных фильтров, в качестве меры для по крайней мере одного из которых стоит ''отклонение'' и ни для одного не стоит ''блокировка'', а также отключенной функции аварийного выключения фильтров при превышении определенного процента срабатываний, злоумышленник может организовать т. н. ''DoS-атаку на фильтры'' — при помощи автоматического скрипта делать множество запросов на совершение правок, намеренно подпадающих под действие многих фильтров правок, забивая тем самым логи журнала злоупотреблений бесполезной информацией.
 
При наличии в вики-проекте достаточного количества включенных фильтров, в качестве меры для по крайней мере одного из которых стоит ''отклонение'' и ни для одного не стоит ''блокировка'', а также отключенной функции аварийного выключения фильтров при превышении определенного процента срабатываний, злоумышленник может организовать т. н. ''DoS-атаку на фильтры'' — при помощи автоматического скрипта делать множество запросов на совершение правок, намеренно подпадающих под действие многих фильтров правок, забивая тем самым логи журнала злоупотреблений бесполезной информацией.
  
Для борьбы с подобным вандализмом может применяться блокировка IP-адресов и подсетей, с которых осуществляется атака (что, однако, выливается в проблему блокировки большинства открытых прокси при должной грамотности атакующего), зачистка мусорных срабатываний непосредственно через базу данных.
+
Для борьбы с подобным вандализмом может применяться блокировка IP-адресов и подсетей, с которых осуществляется атака (что, однако, выливается в проблему блокировки большинства [[Открытый прокси|открытых прокси]] при должной грамотности атакующего), зачистка мусорных срабатываний непосредственно через базу данных.
  
 
== Ссылки ==
 
== Ссылки ==
Строка 174: Строка 179:
 
* [[Special:AbuseFilter|AbuseFilter на Викилогии]]
 
* [[Special:AbuseFilter|AbuseFilter на Викилогии]]
  
 +
{{MediaWiki}}
 
{{ИС}}
 
{{ИС}}
{{MediaWiki}}
 
  
 
[[Категория:Вики-проекты]]
 
[[Категория:Вики-проекты]]

Версия 20:34, 23 января 2012

Фильтр правок (Фильтр злоупотреблений) — расширение движка MediaWiki «AbuseFilter», предназначенное для автоматической проверки атрибутов действия на соответствие заданным администраторами правилам и принятия определенных ими мер отслеживания и пресечения. Этот механизм — своего рода продвинутая вариация ранее применявшихся в интернете концепций спам-листа и вордфильтра.

В настоящее время расширение включено во многих проектах фонда Викимедиа, включая крупнейший раздел Википедии — английский, а также на многих сайтах, контролируемых независимыми от фонда людьми, такими как Циклопедия, Викиреальность, ВикиФокус и др.

История

Предпосылки

До создания фильтра правок в MediaWiki уже существовали некоторые функции фильтрации нежелательного контента: например, запрет определенных фраз по регулярному выражению ($wgSpamRegex), защита страниц от редактирования и создания, расширения Username BlackList и Title BlackList. Однако, эти способны защиты имели существенные недостатки:

  • Регулярные выражения, определяемые в переменной, могли задавать только техники сайта. Помимо этого, проверялись только содержимое страницы и описание правки;
  • Защита страниц накладывается только на отдельные названия, что позволяло вандалу легко обойти запрет, изменив всего несколько символов (см. HAGGER); каскадная защита, позволяющая защищать множество страниц, неэффективна и не может быть наложена на уровне autoconfirmed;
  • Username BlackList и Title BlackList наиболее близко подошли к уровню фильтра правок, позволяя запрещать названия страниц от создания и редактирования, а также некоторые имена учетных записей. Однако, все эти запреты находились на публичной страницы, что создавало проблему сокрытия личных данных, а также существенно упрощало процесс преодоления наложенных ограничений.

Разработка расширения

Основной автор расширения — один из разработчиков MediaWiki Andrew Garrett, работающий под ником «Werdna». Помощь в разработке расширения оказывали River Tarnell и Victor Vasiliev (реализовал использование в фильтрах регулярных выражений, тем самым серьезно увеличив их эффективность).

Документация расширения была опубликована на сайте MediaWiki 27 июня 2008 года [1]. В этот же день оно было добавлено в репозиторий MediaWiki [2]. По состоянию на октябрь 2011 года, в расширении почти не делается серьезных изменений, большая часть коммитов — обновление интернационализации [3].

По состоянию на версию MediaWiki 1.17 в расширении присутствует убогое API, позволяющее только просматривать журнал срабатываний и информацию о списке фильтров. В нестабильных версиях, однако, уже присутствуют функции, реализующие расширенные возможности работы с фильтром правок (проверка синтаксиса выражения, проверка соответствия фильтра и правки) [4]. Тем не менее, полноценная работа с фильтром через API на данный момент невозможна.

В настоящий момент сделано около тысячи коммитов расширения, большая часть которых заключается в обновлении языкового файла, осуществляемое в полуавтоматическом режиме.

Внедрение в вики-проектах

В проектах фонда Викимедиа расширение включено на Мете, MediaWiki.org и Викискладе, в 38 языковых разделах Википедии, 2 разделах Викисловаря, 6 разделах Викиучебника, 3 разделах Викицитатника, 3 разделах Викиновостей и 4 разделах Викитеки. Для конфигурации расширения выделен отдельный файл [5].

На 28 проектах расширение было подключено в 2009 году, на 11 — в 2010, на 13 — в 2011 [6].

В русской Википедии по состоянию на октябрь 2011 года 69 действующих фильтров, 12 отключенных и 65 удаленных. В английской Википедии 96 действующих фильтров, 67 отключенных и 337 удаленных.

В других русскоязычных вики-проектах фильтры правок стали внедряться в основном после его внедрения в разделе Википедии на русском языке. В Викиреальности фильтр правок был подключен летом 2009 года, однако практически не использовался до 2010 года. В Циклопедии расширение находилось с момента ее публичного открытия. В Антикопирайте оно было установлено в январе 2011 года после атаки Сыя. В Новопедии и Викилогии расширение было подключено перед публичным открытием проекта, в Зелевопедии — в первый день после ее создания.

В этих проектах обычно используется около 10-15 работающих фильтров, количество и жесткость варьируется в зависимости от уровня угрозы вандализма и провокаций.

Из англоязычных вики-проектов попытка внедрения была предпринята на 1d4chan.org после сильной атаки дятла, однако несмотря на наличие расширения оно не использовалось, по всей видимости из-за недостаточной квалификации единственного администратора и техника проекта и его нежелания назначать других администраторов.

Механизм работы

Идентификаторы

Каждый фильтр обладает уникальным auto-increment идентификатором, а также задаваемым фильтрописателем названием (которое может быть пустым, а также дублировать название другого фильтра). Название является публичным, оно отображается в списке всех фильтров, при его срабатывании, а также в комментарии к действиям, осуществляемым фильтрами.

В отношении определения названия фильтров правок есть два радикально разных подхода: согласно первому из них называть фильтры необходимо так, чтобы при их срабатывании пользователь мог понять, в чем заключается ошибочность его действия, названия таких фильтров содержат достаточно подробное описание заложенных принципов фильтрации; однако, в отношении заведомо «плохих» пользователь такой подход является контрпродуктивным, поэтому отсюда берет начало второй принцип: фильтр содержат крайне расплывчатое название, не позволяющее понять никаких деталей (например, «Вандализм-1», «Вандализм-2», «Троллинг», «Омский дятел», «Конюшня» и т. д.)

Синтаксис фильтров

Каждый фильтр представляет собой набор правил, написанных на специальном псевдоязыке, манипулирующем стандартными операторами («больше», «меньше», «равно», «содержит», «совпадение по регулярному выражению» и т. д.) и переменными, автоматически получаемыми фильтром правок для каждого обрабатываемого действия. В переменные входит: имя участника, список последних авторов страницы, старый и новый текст страницы в разных форматах, добавленные и удаленные строки и т. д. Операторы «и» и «или» позволяют использовать в одном фильтре несколько условий. К переменным можно применять модификаторы, такие как lcase (переводит строку в нижний регистр), length (возвращает длину строки в символах), ccnorm (нормализация строки) и т. д.

Написание фильтров требует хорошего знания этого языка и грамотного просчета всех возможных false positives, ошибочных срабатываний (например, запрет оскорбительного слова «бл%» может повлечь запрет и слова «потреблять»). В идеале фильтр должен отклонять все злонамеренные правки, пропуская при этом добросовестные. Однако, в силу сложности точного определения границы и изобретательности нарушителей, программист фильтров должен балансировать между возможностями «пропустить вандализм» и «отклонить нормальную правку». В случае серьезной необходимости и невозможности точной отладки фильтров, их намеренно делают такими, что они могут отклонять и нормальные правки, обеспечивая тем не менее хорошую защиту от плохих правок.

В фильтре правок допустимо задавать собственные переменные, которые затем можно вызывать несколько раз. Эти переменные могут соответствовать любой из предопределенных переменных или же строке. Переменные определяются в начале фильтра, строка с определением переменной заканчивается точкой с запятой.

Пример фильтра правок:

  • !('editor' in user_groups) & (user_editcount < 10) & (added_lines rlike 'у[рд]од')

Данный фильтр вначале проверяет наличие флага «editor» и не срабатывает, если он присутствует; затем он проверяет число правок, срабатывая только на пользователей, у которых их меньше 10; затем проверяются добавленные строки на предмет соответствия case-sensitive регулярному выражению «/у[рд]од/» — то есть он сработает на слова «урод» или «удод».

Процессинг действий

При совершении пользователем действия, оно проверяется на предмет соответствия каждому из включенных на момент совершения фильтров, причем даже если условиями первого из них оно было отклонено, оно продолжает проверяться далее, в журнал срабатываний пишутся все срабатывания.

Так как при обработке фильтра интерпретатор поочередно проверяет верность заданных выражений и прекращает обработку фильтра после того, как хоть одно из обязательных условий отдало false, возможна оптимизация фильтров: помещение в его начале общих правил, которые позволяют сильно сузить круг срабатывания (например, число правок), а только затем ресурсоемких специфических правил.

Обработка личных данных

Фильтр не позволяет как-либо обрабатывать в теле условий IP-адреса зарегистрированных пользователей, например запрещая регистрации с определенного диапазона. Обработка IP-адресов возможна только у анонимных участников. Иная личная информация (User-Agent, параметры браузера и заголовки запроса) не обрабатываются.

Фильтр записывает IP-адреса всех пользователей, включая зарегистрированных, в раздел «Приватные данные», отображающийся внизу страницы отображения данных о срабатывании фильтра для пользователей, имеющих право просмотра личных данных в журнале злоупотреблений. Отображается только последний адрес в цепочке, не отображаются XFF-заголовки.

Просмотреть IP-адреса участников при помощи функции проверки переменных всех свежих правок невозможно.

Видимость

Каждый из фильтров правок может быть публичным (может быть просмотрен участником с базовым правом просмотра фильтра правок, часто выдаваемым широкому кругу участников или даже всем участникам) и приватным (просмотр может производиться только участниками с правом просмотра закрытых фильтров или правом изменения фильтров).

Таким образом, публичными обычно отмечают фильтры, содержимое которых не имеет смысл скрывать, например фильтры, проверяющие способ добавления новой темы на странице обсуждения, отслеживающие создание категории без надкатегории, правку шапки форума и т. д., то есть против действий, которые обычно совершаются новичками или мало вошедшими в тему вики-проекта участниками, не имеющими злых намерений. Закрытыми отмечаются фильтры против явно злонамеренных действий, при помощи которых нарушитель может значительно упростить обход поставленных ограничений, а также фильтры, содержащие в себе личные данные.

Срабатывания всех фильтров, вне зависимости от их настроек видимости, записываются в публичный журнал срабатываний.

Меры

Меры, принимаемые фильтром, разнятся от логгирования срабатывания фильтра без каких-либо помех совершению правки до бессрочной блокировки подсети класса B и снятия всех технических флагов. В отличие от механизмов фильтрации некоторых других сайтов, фильтр не позволяет осуществлять автозамены слов в размещаемом пользователем тексте.

Системный администратор сервера определяет меры, которые может выбирать администратор при создании фильтра. Как правило, отключаются меры блокирования пользователя и IP-подсети, а также снятие всех прав — такие фильтры потенциально опасны при попадании учетной записи администратора в руки вандалов или недобросовестных намерений самого администратора (например, он может определить снятие флагов и блок при первой правке бюрократа вики-проекта, после чего сможет значительно навандалить, не встречая сопротивления).

Также возможные меры делятся на общие и ограниченные (restricted), последние может использовать только администратор со специальными правами. Эта функция предназначена для обеспечения большей безопасности работы с механизмом. Ограниченными по умолчанию являются действия выше «отклонения».

При наличии у пользователя, не имеющего возможности блокировать других участников, прав для создания фильтров правок, это фактически дает ему возможность налагать бессрочные блокировки — для этого можно использовать фильтр, единственным условием которого является имя пользователя, после первой его правки фильтр заблокирует его.

Одна из мер — запись сообщения о срабатывании в журнал фильтра — обязательна и не может быть отключена. Остальные могут быть подключены в любых комбинациях (например, сужение, предупреждение, отклонение). Практического ограничения не существует, однако не имеет смысла создавать комбинации меры отметка и ограничивающих действий — так как попавшая под действие такого фильтра правка все равно не сможет попасть на сайт и быть отмеченной.

Права доступа

Работа с различными механизмами фильтра правок ограничивается целым набором прав доступа, которые позволяют гибко настраивать права для совершения различных действий. В настоящее время AbuseFilter насчитывает 10 прав, начинающихся с abusefilter- [7]. По умолчанию эти права не определены и должны быть определены пользователем во время установки фильтров, пример возможной конфигурации приводится на странице расширения.

Права можно разделить на те, которые управляют доступом на просмотр информации (abusefilter-view — просмотр публичных фильтров; abusefilter-view-private — просмотр закрытых фильтров; abusefilter-log — просмотр журнала; abusefilter-log-detail — просмотр деталей срабатываний; abusefilter-private — просмотр личной информации; abusefilter-hidden-log — просмотр скрытых записей журнала) и те, которые определяют доступ к совершению изменений (abusefilter-modify — изменение фильтров; abusefilter-modify-restricted — использование ограниченных мер пресечения; abusefilter-hide-log — скрытие записей в журнале).

На практике права обычно распределяются между группами (все)/редакторы, администраторы, чекюзеры, ревизоры. В некоторых конфигурациях (Викиреальность, Антикопирайт) просмотр даже публичных фильтров разрешен только администраторам, в других (многие разделы Википедии) просматривать даже подробный лог может любой аноним.

Интерфейс

Служебная страница

Основной страницей, при помощи которой обеспечивается большая часть взаимодействия пользователя с расширением, является служебная страница AbuseFilter. Различные функции, которые можно вызывать через расширение, в интерфейсе представлены в виде условных подстраниц, каждая из которых может обладать собственными настройками прав доступа. На заглавной странице содержится список подстраниц, перечисление включенных и отключенных фильтров, краткое описание механизма и статистические данные по числу срабатываний.

Подстраницы фильтра правок:

  • Последние изменения фильтров (history) — реализует журнал изменений фильтров, представленный, в отличие от стандартных журналов MediaWiki, в виде таблицы, содержащей в себе данные о промежуточных и окончательных изменениях в фильтрах. Если пользователь не может просматривать закрытые фильтры, на этой странице он увидит только изменения публичных фильтров.
  • Пакетное тестирование (test) — позволяет проверить набор условий фильтрации на наличие совпадений, не сохраняя его в качестве фильтра. Проверяются последние уже сделанные свежие правки. Возможно проверить изменения, сделанные определенным участником; на определенной странице; в определенное время.
  • Изучение последних правок (examine) — позволяет просмотреть последние правки в вики-проекте и все их переменные, за исключением IP-адреса, как если бы они попали в фильтр правок;
  • Средства отладки (tools) — позволяет определить соответствие синтаксису написанного условия фильтрации, а также позволяет восстановить статус автоподтверждения участнику, у которого он был снят в результате ошибочного срабатывания фильтра.
  • Импорт фильтра (import) — интерфейс для передачи фильтров правок между проектами: в исходном проекте фильтр сохраняется в виде ассоциативного массива, после чего этот массив копируется на новый сервер; автоматического импорта фильтра не происходит — эта функция позволяет только произвести автозаполнение полей создания нового фильтра правок.

examine позволяет просмотреть параметры для любой правки в проекте, включая скрытые на уровне «ревизор», даже если просматривающий администратор не обладает этим флагом — в таком случае на странице не будет доступен скрытый текст, но останется видно имя участника, в том числе если оно было скрыто.

Журнал срабатываний

При каждом срабатывании включенного фильтра информационное сообщение об этом записывается в журнале срабатываний фильтров (журнал злоупотреблений), который является обособленной от обычных журналов MediaWiki страницей. Записывается время срабатывания, имя участника, номер и название действия, страница или название учетной записи, с которой связано вызвавшее срабатывание действие и ссылки на расширенный просмотр отдельный записей журнала.

Расширенный просмотр позволяет посмотреть все переменные, которые были созданы для этого срабатывания, а также последний IP-адрес попавшего в фильтр пользователя, если просматривающий участник имеет соответствующее право доступа.

До некоторого момента записи в этом журнале нельзя было скрыть или удалить, в связи с чем в некоторых англоязычных антивикипедийных источниках это отмечалось как серьезный недостаток и новый вид вандализма — размещение таким образом личной информации, которую невозможно будет скрыть. Затем было выпущено изменение, теперь администраторы с правами ревизоров могут скрывать отдельные записи из журнала срабатываний фильтров (запись помечается как «скрытая» и видна только ревизорам, запись о сокрытии пишется в обычный журнал сокрытий).

Журнал изменений фильтров

Журнал abusefilter в системе стандартных журналов MediaWiki долгое время после создания расширения существовал, но не использовался. В настоящее время в него пишутся сообщения об изменении фильтров (если журнал открыт, записываются все сообщения об изменениях, включая изменения закрытых фильтров), создавая тем самым менее функциональную копию истории в составе фильтра правок, которые также транслируются в свежие правки. По умолчанию журнал открыт для всех участников, но может быть закрыт.

API

API расширения было создано в начале его разработки и практически не менялось в течение двух лет; в стабильной версии 1.17 оно содержит в себе только функции просмотра списка фильтров (аналог главной страницы вики-интерфейса расширения) и вывод журнала срабатываний фильтров.

В тестовых версиях реализованы некоторые дополнительные служебные функции работы с фильтрами, однако не реализованы базовые функции для просмотра/изменения/модификации фильтров. Таким образом, на данный момент невозможно создание работающей через API программы-клиента для работы с фильтрами правок, но возможна автоматическая обработка и анализ журнала срабатываний (например, это может использовать для создания контролирующего вандализм бота).

База данных

Всю информацию фильтр правок хранит в нескольких таблицах, создаваемых при его установке:

  • abuse_filter — информация о существующих фильтрах правок и их параметры;
  • abuse_filter_history — история изменений фильтров правок;
  • abuse_filter_log — журнал срабатываний фильтров.

Метки, которые фильтр может присваивать отдельным действиям, хранятся в таблице change_tag. Список существующих меток содержится в valid_tag.

Социальная сторона

Некорректные срабатывания

В связи с рассмотренной выше невозможностью достичь совершенства фильтров они иногда вызывают некорректные срабатывания, запрещая совершать правки, совершенные с добрыми намерениями. При большом числе подобных срабатываний сайт может получить репутацию «тотально огороженного», на котором не рекомендуется править. Радикально настроенные участники могут заявлять, что такой сайт «находится в БАО».

Аноним или новый участник, не имеющий представления о предназначении фильтра правок, действие которого было запрещено срабатыванием фильтра, может прекратить править сайт, особенно если срабатывание произошло при первой попытке на невинное действие.

Для смягчения последствий некорректных срабатываний администраторы могут просматривать журнал фильтра правок, давать пояснения и корректировать ошибки, собственноручно вносить в вики отклоненные нормальные правки с корректной атрибуцией авторства правки.

Кооперация фильтрописателей

Так как написание фильтров является достаточно сложной интеллектуальной работой, а также в силу склонности ряда википедистов к общению и поиску признания, активные и грамотные фильтрописатели могут объединяться в группы и использовать средства внепроектного общения (почтовые рассылки, мессенджеры) для обсуждения фильтров (в том числе закрытых, которые принципиально невозможно полноценно обсуждать на открытых страницах вики-проекта).

Практической пользой от такой кооперации является взаимообмен знаниями между фильтрописателями, более эффективное совершенствование и написание фильтров, более быстрый отлов ошибок. В качестве негативных моментов некоторые могут называть возможность сговора между авторами фильтров и взаимопокрытия совершенных нарушений.

Информация закрытых фильтров

В связи с тем, что закрытые фильтры часто содержат в себе нетривиальный код, их содержимое может представлять интерес для некоторых категорий участников, не обладающих достаточными правами для непосредственного доступа к ним через интерфейс вики-проекта. Закрытыми фильтрами обычно интересуются две крупные группы участников: вредители, для которых информация из этих фильтров позволит успешнее осуществлять свои намерения и любопытствующие, для которых их содержимое представляет исследовательский интерес.

Для получения информации из закрытых фильтров достаточно раскрученные в сообществе участники с хорошей репутацией могут выпрашивать их код у администраторов, пользуясь хорошими отношениями с ними (одним из объяснений выпрашивания может являться намерение участника использовать готовый качественный фильтр на своем вики-проекте). Злонамеренные участники могут получать информацию обманом или взломом администраторов.

В некотором приближении условия закрытого фильтра можно понять при помощи анализа его журнала срабатываний при достаточном количестве срабатываний.

Ограничения опытных участников

Несмотря на то, что основное назначение фильтра правок — защита от вандализма и провокаций неопытных участников, он может использоваться и для наложения ограничений на любого из опытных участников, не имеющих право редактирования фильтров. То есть, например, администрация проекта, недовольная действиями какого-то очевидно добросовестного, но в чем-то ведущего себя некорректно участника, может запретить ему при помощи фильтра совершать некоторые действия, что во многих случаях может вызвать его недовольство. В альтернативных вики-проектах известно несколько таких случаев.

Активный участник, долгое время работавший в вики-проекте согласно принципу вики оказывается задет тем, что администраторы мешают ему осуществлять свое творчество, и, как результат, может покинуть проект в знак протеста или заняться деструктивной деятельностью.

Например, Андрей Зелев в Циклопедии в связи со своими высказываниями на форуме против ресурса сибирских националистов был помещен в фильтр правок «антифлуд», который предположительно запрещал редактировать форум или же как-либо упоминать этот сайт или делать против него обвинения. В знак протеста Андрей Зелев заявил о прекращении редактирования сайта, пока этот фильтр не был убран.

Противодействие

Торпедирование включения

Противодействие использованию фильтров правок может исходить не со стороны нарушителей, а со стороны добросовестных или кажущихся таковыми членов сообщества вики-проектов. Эта их позиция может быть продиктована несколькими причинами:

  • Оценка введения фильтров правок как введение инструмента цензуры; опасения в нецелевом использовании фильтров; принципиальное несогласие с механизмом, которые по их мнению противоречит идее вики;
  • Тайное намерение осуществлять в проекте вредоносные действия и опасения из-за значительного затруднения таких действий в случае введения расширения.

В проектах, решения в которых принимаются при помощи демократических процедур, при достаточном числе противников введения фильтров, они могут успешно не позволить включить расширения. В проектах с авторитарным руководством такие участники могут устроить забастовку, объявив о прекращении работы в проекте в знак протеста; правом вето может воспользоваться один из представителей высших кругов.

Обход фильтров

Ошибка создания миниатюры: Не удаётся сохранить эскиз по месту назначения
Основная статья: Обход фильтра правок.

Создание механизма фильтра правок является значительным достижением в защите сайтов на основе MediaWiki, позволяя при наличии грамотного фильтрописателя или исходного кода фильтров защищать его от многих угроз и существенно снижать эффективность вандализма, троллинга и спама.

Однако создание фильтра правок не является безусловной победой в «борьбе брони и снаряда» — злонамеренные пользователи, применяя экспериментальный способ, могут обходить написанные фильтры правок, вынуждая администрацию продолжать постоянно следить за правками и журналами срабатываний (чего бы не требовалось в случае написания «идеальных фильтров», отклоняющих 100 % вредоносных действий и не срабатывающих на добросовестные, которые являются на данный момент недостижимыми, так как достоверно определить добросовестность действия может только человек или не существующий в настоящее время искусственный интеллект) или все более усложнять фильтры, повышая шанс попадания в них нормальных правок.

DoS фильтров

При наличии в вики-проекте достаточного количества включенных фильтров, в качестве меры для по крайней мере одного из которых стоит отклонение и ни для одного не стоит блокировка, а также отключенной функции аварийного выключения фильтров при превышении определенного процента срабатываний, злоумышленник может организовать т. н. DoS-атаку на фильтры — при помощи автоматического скрипта делать множество запросов на совершение правок, намеренно подпадающих под действие многих фильтров правок, забивая тем самым логи журнала злоупотреблений бесполезной информацией.

Для борьбы с подобным вандализмом может применяться блокировка IP-адресов и подсетей, с которых осуществляется атака (что, однако, выливается в проблему блокировки большинства открытых прокси при должной грамотности атакующего), зачистка мусорных срабатываний непосредственно через базу данных.

Ссылки