Фильтр правок

Материал из Мегапедии
Перейти к: навигация, поиск

Фильтр правок (Фильтр злоупотреблений) — расширение движка 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-адресов и подсетей, с которых осуществляется атака (что, однако, выливается в проблему блокировки большинства открытых прокси при должной грамотности атакующего), зачистка мусорных срабатываний непосредственно через базу данных.

Ссылки

Фильтр правок относится к теме «MediaWiki»   ±