Manual:$wgSpamRegex/ru

Любой текст, добавленный на вики-страницу и соответствующий этому регулярному выражению, будет распознан как вики-спам, и редактирование будет заблокировано. $wgSpamRegex затронет все группы пользователей; даже членам групп sysop и bureaucrats будет запрещено сохранять текст, если он соответствует $wgSpamRegex. Используйте, чтобы иметь возможность устанавливать правила, которые также позволяют фильтровать по группам! $wgSpamRegex является одним из наиболее эффективных решений для защиты от спама в MediaWiki. Это не будет блокировать весь спам, но может значительно уменьшить его количество, почти не оказывая негативного влияния на добросовестных пользователей. Параметры конфигурации $wgSpamRegex будут контролировать, как MediaWiki проверяет текст правок и определяет, являются ли они спамом или нет.

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

Обратите внимание, что предпоследняя строка не имеет "|" в конце строки. Это происходит потому, что следующая строка завершает регулярное выражение закрывающей оболочкой /, за которой следует переключатель "i".

Этот пример включает в себя общие ключевые слова для спама (некоторые взяты со спам-листа Meta-Wiki), а также методы блокировки скрытого спама CSS.

Использование регулярных выражений для блокировки спама
Вот учебник по регулярным выражениям. Поэкспериментируйте с настройкой $wgSpamRegex и проверьте некоторые изменения на своей странице песочницы, чтобы увидеть, что блокируется. Но будьте осторожны! Позаботьтесь о том, чтобы избежать ложных срабатываний, т. е. неправильного сопоставления законных правок, см. ИЗБЕГАЙТЕ ЛОЖНЫХ СРАБАТЫВАНИЙ!

Параметр, который вы присваиваете $wgSpamRegex, представляет собой регулярное выражение (см. статью в Википедии и мануал PHP о регулярных выражениях). Приведенный выше пример показывает регулярное выражение, построенное на нескольких строках, используя точечный синтаксис PHP для объединения строк. Это делает длинное регулярное выражение более компактным, но и немного более сложным.

If you create your own regular expressions you may want to test them out in a PCRE Regex Evaluator (click the PCRE tab on this page).

Простой пример
Вот более простой пример:

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

Блокируйте несколько разных слов/доменов
Давайте расширим наш пример, чтобы попытаться сопоставить больше видов спама:

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

$WgSpamRegex применяется ко всему внесённому тексту, включая URL-адреса спам-ссылок. Таким образом, блокировка доменных имён может быть очень эффективным способом избавиться от конкретного спамера.

ИЗБЕГАЙТЕ ЛОЖНЫХ СРАБАТЫВАНИЙ!
Избежать ложных срабатываний - вот настоящая проблема, и ее лучше всего проиллюстрировать плохим примером:

Многие спамеры любят говорить о ' ' (какой-то наркотик. Какая разница? только не мы!) и поэтому у вас может возникнуть соблазн сопоставить это слово как спам, но это также помешает пользователям упоминать слово ' '. Очень легко совершить такую ошибку. Будьте осторожны с настройкой регулярных выражений. Вы хотите остановить спамеров, не причиняя неудобств вашим пользователям. Эта проблема может быть преодолена во многих случаях путем включения шаблона границы слова "\b" до и после любых слов, которые могут содержаться в более крупном слове, например:

Другие советы по регулярных выражениях
Регулярные выражения очень сильны. $wgSpamRegex применяется ко всему тексту редактируемой страницы или раздела, а не только к URL-адресам. Это дает вам возможность блокировать всё, что вам не нравится, если вы можете разработать хорошее регулярное выражение (как можно более конкретное, чтобы избежать ложных срабатываний). В следующем разделе о скрытом спаме CSS мы используем этот инструмент.

Сообщение о спаме
Обычно, когда параметр $wgSpamRegex совпадает с некоторым спамом, отображается следующее сообщение:


 * Страница, которую вы хотели сохранить, была заблокирована спам-фильтром. Это, вероятно, вызвано ссылкой на внешний сайт, внесённый в чёрный список.


 * Следующий текст - это то, что вызвало наш спам-фильтр: [слово/доменное имя, которое было заблокировано]

Этот текст может быть изменен и расположен на двух редактируемых вики-страницах в пространстве имен MediaWiki. Click 'Special Pages' -> 'Wiki data and tools: System Messages', type 'spampro' into the 'Filter by prefix:' field and click 'Go'. If you get 'View Source' instead of 'Edit' on the top tab, then you don't have permission to edit. You need to log in as an sysop user (or the WikiSysop user which you configured during installation).

'$1' in MediaWiki:Spamprotectionmatch displays the failed edit's regex match that tripped the spam filter. Delete '$1' if you want it hidden.

Displaying/Hiding the matched text
If you've made a regex which is too restrictive, or you have made some other mistake in the setting, then you may get false positives. Indeed the full example above might match legitimate text in some rare circumstances (maybe your users really do want to talk about buying Viagra).

By displaying the text which matched, the MediaWiki:Spamprotectionmatch message helps to reduce problems caused by false positives.

It allows your users to accurately report problems to you, about your $wgSpamRegex setting.

It also allows them to figure out a workaround, so they can continue with their wiki editing.

Unfortunately it's also a very useful bit of information for spammers visiting your site. Some spammers are automated bots, so they won't be seeing this information anyway, however many spammers (believe it or not) are humans. These humans could go to the trouble of looking at the matching information, and trying to devise a workaround (e.g. just missing out the domain name that you have blocked, but linking to various other domains). It's difficult to know how prevalent this kind of behavior is, but if you wanted to make life more difficult for them. You could hide the spam matching information by simply setting your MediaWiki:Spamprotectionmatch message as empty. You should only do this if you are very aware of the above points about false positives, and have carefully designed your regexp to avoid them.

CSS Hidden Spam
MediaWiki is quite permissive when it comes to HTML tags, and CSS style definitions (see Help:HTML in wikitext on Meta-Wiki)

This has given spammers the opportunity to invent a sneaky trick to hide their spam from view. It doesn't show up on your pages, but it does show up in your edit boxes, and the changes show up in your 'recent changes' display. As such it causes confusion to your legitimate users, and that's before you consider the effects of helping a spammer by hosting their links. Generally 'CSS Hidden Spam' is all bad. Just because you can't see it (easily), doesn't mean you can ignore it.

The problem was identified by the folks at chongqed.org in 2005, but has got a lot worse in 2006, to the point where it seems most MediaWiki spammers are using this trick.

We can use a regular expression to prevent the CSS tricks which they are using. Two of these are incorporated in the full example above (combined using the '|' symbol):

To prevent CSS hidden spam of the form :

To prevent CSS hidden spam of the form :

For a slightly more strict setting you might prefer to disallow various attributes of the style tag altogether:

...but you may find this starts to restrict your users more than you would like.

Block ALL external links
You can block all external links by using this regex:

This is extremely restrictive to the wiki's legitimate users, as they cannot link to any external site anymore. It is a poor solution to the spam problem, although it is marginally better than a complete lock down.

If you are going to use this, make sure your 'MediaWiki:Spamprotectiontext' page has an explanation of what you have done.

Limit external links to 100
You can limit the total number of external links allowed per page, to say 100, with this

If you do this, make sure your 'MediaWiki:Spamprotectiontext' page has an explanation of what you've done.

pcre.backtrack_limit
PHP since version 5.3.7 has a pcre.backtrack_limit which defaults to 1000000 (1M). However this may still be too low. Try adding the following line to your "LocalSettings.php" file:

If this still not enough you may gradually increase this limit until it fits you wikis actual requirement.