Борьба со спамом и регулярные выражения PHP
Статьи -> Программирование -> PHP
Борьба со спамом и регулярные выражения PHP
v:1.1 07.02.2010
Борьба со спамом в комментариях на сайтах для многих веб-мастеров превращается в головную боль. С одной стороны, антиспамовые фильтры и барьеры можно усложнить и спама не будет, но не будет и комментариев. А с другой стороны, если антиспамовые фильтры убрать совсем, то от спамеров отбоя не будет. Надо найти некую золотую середину, чтобы и спама было поменьше и пользователям было удобно.
В интернете можно найти много способов борьбы со спамом: это и обязательная регистрация и премодерация комментариев и разного рода captcha. Однако все это не очень удобно.
Для борьбы со спамом хорошо подходят регулярные выражения.
Вот что Викпедия говорит про регулярные выражения:
Регулярные выражения (англ. regular expressions, сокр. RegExp, RegEx, жарг. регэкспы или регексы) -
система синтаксического разбора текстовых фрагментов по формализованному шаблону, основанная на системе записи образцов для поиска.
Образец (англ. pattern), задающий правило поиска, по-русски также иногда называют "шаблоном", "маской". Регулярные выражения произвели прорыв в
электронной обработке текста в конце XX века. Они являются развитием символов-джокеров (англ. wildcard characters).
Т.е. регулярные выражения - это средство, с помощью которого можно находить в тексте фрагменты, соответствующие заданному условию.
Один из вариантов определения спама в комментариях - это нахождение в тексте слов и фраз, характерных для сообщений спамера.
Практически все такие сообщения содержат в теле адрес сайта. Вот по адресу сайта можно и организовать фильтрацию. Т.е. если в комментариях присутствует
адрес сайта, значит это сообщение спамера.
Конечно, это накладывает дополнительные ограничения и создает неудобства добропорядочным пользователям,
но это можно сгладить организационными мерами. Во-первых, четко прописать правила добавления комментариев, с обязательным указанием на недопустимость
адресов сайтов, во-вторых, зарегистрированным пользователям все-таки разрешать вставлять адреса сайтов.
Определять наличие адреса сайта в тексте комментария можно таким регулярным выражением:
Это регулярное выражение описывает следующие случаи:
- Строка начинается с "http:// (https://)" или c "www".
- Состоит из хотя бы одного слова, которе составляют буквы латинского алфавита и знаки "-", "_" и которое заканчивается точкой.
- В составе строки должо быть слово, которе составляют буквы латинского алфавита и знаки "-", "_", слово должно быть не меньше 2 и не больше 4 букв.
- Строка может заканчиваться словом, состоящим из цифр и знака ":"
- Строка может заканчиваться знаком "/"
- http://spam.ru
- http://www.spam.ru
- www.spam.ru
- www.spam.smam.ru/
- www.spam.smam.ru:8080/
Кстати, для изучения регулярных выражений рекомендую эту статью. А для ускорения составления удобно пользоваться конструктором регулярных выражений на этом сайте.
В языке PHP есть все необходимые средства для работы с регулярными выражениями.
Вот как будет выглядеть код для требуемого шаблона:
Код основан на PHP функции mb_eregi, думаю не требует пояснений.
Описанный выше способ борьбы со спамом технически просто, но в то же время достаточно эффективен и доставляет минимум неудобств пользователям.
Петрелевич Сергей
petrelevich@yandex.ru
www.SmartyIT.ru
Метки: PHP Web Регулярные выражения
Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.
rezwyi | Aug 2, 2010 9:37:39 AM | |
Интересно, почитал. Спасибо за информацию. | ||
Petrelevich | Aug 2, 2010 9:26:48 PM | |
Казалось бы простой способ, а еще ни одного спамерского сообщения не было. Посмотрим, как дальше будет. | ||
Аноним | Oct 5, 2010 9:04:16 PM | |
Это спам spam.ru | ||
Petrelevich | Oct 5, 2010 9:24:23 PM | |
Это спам spam.ru Спасибо за замечание, исправил выражение. |
||