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

Материал из Мегапедии
Перейти к: навигация, поиск
Строка 4: Строка 4:
  
 
== История ==
 
== История ==
=== Предпоссылки ===
+
=== Предпосылки ===
 
До создания фильтра правок в MediaWiki уже существовали некоторые функции фильтрации нежелательного контента: например, запрет определенных фраз по регулярному выражению ($wgSpamRegex), защита страниц от редактирования и создания, расширения Username BlackList и Title BlackList. Однако, эти способны защиты имели существенные недостатки:
 
До создания фильтра правок в MediaWiki уже существовали некоторые функции фильтрации нежелательного контента: например, запрет определенных фраз по регулярному выражению ($wgSpamRegex), защита страниц от редактирования и создания, расширения Username BlackList и Title BlackList. Однако, эти способны защиты имели существенные недостатки:
 
* Регулярные выражения, определяемые в переменной, могли задавать только техники сайта. Помимо этого, проверялись только содержимое страницы и описание правки;
 
* Регулярные выражения, определяемые в переменной, могли задавать только техники сайта. Помимо этого, проверялись только содержимое страницы и описание правки;
Строка 11: Строка 11:
  
 
=== Создание расширения ===
 
=== Создание расширения ===
 +
Основной автор расширения — один из разработчиков MediaWiki Andrew Garrett, работающий под ником «Werdna». Помощь в разработке расширения оказывали River Tarnell и 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].
  
 
=== Внедрение в вики-проектах ===
 
=== Внедрение в вики-проектах ===
 +
В проектах фонда Викимедиа расширение включено на Мете, 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].
 +
 +
В других русскоязычных вики-проектах фильтры правок стали внедряться в основном после его внедрения в разделе Википедии на русском языке. В Викиреальности фильтр правок был подключен летом 2009 года, однако практически не использовался до 2010 года. В Циклопедии расширение находилось с момента ее публичного открытия. В Антикопирайте оно было установлено в январе 2011 года после атаки Сыя. В Новопедии расширение было подключено перед публичным открытием проекта, в Зелевопедии — в первый день после ее создания.
 +
 +
Из англоязычных вики-проектов попытка внедрения была предпринята на 1d4chan.org после сильной атаки дятла, однако несмотря на наличие расширения оно не использовалось, по всей видимости из-за недостаточной квалификации единственного администратора и техника проекта и его нежелания назначать других администраторов.
  
 
== Механизм работы ==
 
== Механизм работы ==
Строка 20: Строка 29:
  
 
Написание фильтров требует хорошего знания этого языка и грамотного просчета всех возможных ''false positives'', ошибочных срабатываний (например, запрет оскорбительного слова «бл%» может повлечь запрет и слова «потреблять»). В идеале фильтр должен отклонять все злонамеренные правки, пропуская при этом добросовестные. Однако, в силу сложности точного определения границы и изобретательности нарушителей, программист фильтров должен балансировать между возможностями «пропустить вандализм» и «отклонить нормальную правку». В случае серьезной необходимости и невозможности точной отладки фильтров, их намеренно делают такими, что они могут отклонять и нормальные правки, обеспечивая тем не менее хорошую защиту от плохих правок.
 
Написание фильтров требует хорошего знания этого языка и грамотного просчета всех возможных ''false positives'', ошибочных срабатываний (например, запрет оскорбительного слова «бл%» может повлечь запрет и слова «потреблять»). В идеале фильтр должен отклонять все злонамеренные правки, пропуская при этом добросовестные. Однако, в силу сложности точного определения границы и изобретательности нарушителей, программист фильтров должен балансировать между возможностями «пропустить вандализм» и «отклонить нормальную правку». В случае серьезной необходимости и невозможности точной отладки фильтров, их намеренно делают такими, что они могут отклонять и нормальные правки, обеспечивая тем не менее хорошую защиту от плохих правок.
 +
 +
Пример фильтра правок:
 +
* <code>!('editor' in user_groups) & (user_editcount < 10) & (added_lines rlike 'у[рд]од')</code>
 +
 +
Данный фильтр вначале проверяет наличие флага «editor» и не срабатывает, если он присутствует; затем он проверяет число правок, срабатывая только на пользователей, у которых их меньше 10; затем проверяется добавленный текст на предмет соответствия регулярному выражению «/у[рд]од» — то есть он сработает на слова «урод» или «удод».
  
 
=== Процессинг действий ===
 
=== Процессинг действий ===
Строка 34: Строка 48:
 
Меры, принимаемые фильтром, разнятся от логгирования срабатывания фильтра без каких-либо помех совершению правки до бессрочной блокировки подсети класса B и снятия всех технических флагов. В отличие от механизмов фильтрации некоторых других сайтов, фильтр не позволяет осуществлять автозамены слов в размещаемом пользователем тексте.
 
Меры, принимаемые фильтром, разнятся от логгирования срабатывания фильтра без каких-либо помех совершению правки до бессрочной блокировки подсети класса B и снятия всех технических флагов. В отличие от механизмов фильтрации некоторых других сайтов, фильтр не позволяет осуществлять автозамены слов в размещаемом пользователем тексте.
  
Сисадмин сервера определяет меры, которые может выбирать администратор при создании фильтра. Как правило, отключаются меры блокирования пользователя и IP-подсети, а также снятие всех прав — такие фильтры потенциально опасны при попадании учетной записи администратора в руки вандалов или недобросовестных намерений самого администратора (например, он может определить снятие флагов и блок при первой правке бюрократа вики-проекта, после чего сможет значительно навандалить, не встречая сопротивления).
+
Сисадмин сервера определяет меры, которые может выбирать администратор при создании фильтра. Как правило, отключаются меры блокирования пользователя и IP-подсети, а также снятие всех прав — такие фильтры потенциально опасны при попадании учетной записи администратора в руки вандалов или недобросовестных намерений самого администратора (например, он может определить снятие флагов и блок при первой правке бюрократа вики-проекта, после чего сможет значительно навандалить, не встречая сопротивления).
  
 
Также возможные меры делятся на общие и ограниченные (''restricted''), последние может использовать только администратор со специальными правами. Эта функция предназначена для обеспечения большей безопасности работы с механизмом. Ограниченными по умолчанию являются действия выше «отклонения».
 
Также возможные меры делятся на общие и ограниченные (''restricted''), последние может использовать только администратор со специальными правами. Эта функция предназначена для обеспечения большей безопасности работы с механизмом. Ограниченными по умолчанию являются действия выше «отклонения».
  
При наличии у пользователя, не имеющего возможности блокировать других участников, прав для создания фильтров правок, это фактически дает ему возможность налагать бессрочные блокировки — для этого можно использовать фильтр, единственным условием которого является имя пользователя, после первой его правки фильтр заблокирует его.
+
При наличии у пользователя, не имеющего возможности блокировать других участников, прав для создания фильтров правок, это фактически дает ему возможность налагать бессрочные блокировки — для этого можно использовать фильтр, единственным условием которого является имя пользователя, после первой его правки фильтр заблокирует его.
  
Одна из мер — запись сообщения о срабатывании в журнал фильтра — обязательна и не может быть отключена. Остальные могут быть подключены в любых комбинациях (например, ''сужение'', ''предупреждение'', ''отклонение''). Практического ограничения не существует, однако не имеет смысла создавать комбинации меры ''отметка'' и ограничивающих действий — так как попавшая под действие такого фильтра правка все равно не сможет попасть на сайт и быть отмеченной.
+
Одна из мер — запись сообщения о срабатывании в журнал фильтра — обязательна и не может быть отключена. Остальные могут быть подключены в любых комбинациях (например, ''сужение'', ''предупреждение'', ''отклонение''). Практического ограничения не существует, однако не имеет смысла создавать комбинации меры ''отметка'' и ограничивающих действий — так как попавшая под действие такого фильтра правка все равно не сможет попасть на сайт и быть отмеченной.
  
 
=== Журнал срабатываний ===
 
=== Журнал срабатываний ===
Строка 46: Строка 60:
  
 
== Социальная сторона ==
 
== Социальная сторона ==
 +
 
=== Некорректные срабатывания ===
 
=== Некорректные срабатывания ===
  
Строка 56: Строка 71:
 
Создание механизма фильтра правок является значительным достижением в защите сайтов на основе MediaWiki, позволяя при наличии грамотного фильтрописателя или исходного кода фильтров защищать его от многих угроз и существенно снижать эффективность вандализма, троллинга и спама.
 
Создание механизма фильтра правок является значительным достижением в защите сайтов на основе MediaWiki, позволяя при наличии грамотного фильтрописателя или исходного кода фильтров защищать его от многих угроз и существенно снижать эффективность вандализма, троллинга и спама.
  
Однако создание фильтра правок не является безусловной победой в «борьбе брони и снаряда» — злонамеренные пользователи, применяя экспериментальный способ, могут обходить написанные фильтры правок, вынуждая администрацию продолжать постоянно следить за правками и журналами срабатываний (чего бы не требовалось в случае написания «идеальных фильтров», отклоняющих 100% вредоносных действий и не срабатывающих на добросовестные, которые являются на данный момент недостижимыми, так как достоверно определить добросовестность действия может только человек или не существующий в настоящее время [[искусственный интеллект]]) или все более усложнять фильтры, повышая шанс попадания в них нормальных правок.
+
Однако создание фильтра правок не является безусловной победой в «борьбе брони и снаряда» — злонамеренные пользователи, применяя экспериментальный способ, могут обходить написанные фильтры правок, вынуждая администрацию продолжать постоянно следить за правками и журналами срабатываний (чего бы не требовалось в случае написания «идеальных фильтров», отклоняющих 100 % вредоносных действий и не срабатывающих на добросовестные, которые являются на данный момент недостижимыми, так как достоверно определить добросовестность действия может только человек или не существующий в настоящее время [[искусственный интеллект]]) или все более усложнять фильтры, повышая шанс попадания в них нормальных правок.
  
  
 
[[Категория:Вики-проекты]]
 
[[Категория:Вики-проекты]]

Версия 06:19, 9 октября 2011

Фильтр правок — расширение движка 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].

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Видимость

Меры

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

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

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

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

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

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

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

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

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

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

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

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

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