Современные средства антиспам пытаются отличить человека от робота. При этом используются разного рода captcha, различные графические пазлы и т.п. Это может работать в ряде случаев, но ситуация такова, что на войну с captcha выходят специально обученные люди (индо-китайские биороботы), и они в этой войне побеждают. Потому задачу проверки контента нужно немного изменить, не стараясь выяснить робот перед нами или человек, а помешать конечной цели спамера — выставить свои злополучные ссылки.
Понятно, что должен работать комплекс мер. И в итоге, мы все равно получим некоторую долю спам-сообщений. Полностью избавиться от спама можно, проверяя абсолютно все сообщения перед их публикацией. Для каких то проектов это может быть приемлемо (персональные блоги до какого то предела посещаемости, корпоративные сайты и проекты с низкой посещаемостью). Наиболее уязвимы к спаму форумы, известные форумные модули.
Какие простейшие методы аниспам можно использовать в комплексе.
Примеры буду приводить для drupal v6, но сами идеи можно применить для любого движка.
1. Разрешить публиковать сообщения только зарегистрированным пользователям. Спамеру придется реализовывать по крайней мере многоступенчатую систему публикации — регистрация аккаунта, активация аккаунта, начало публикации сообщений.
2. Снабдить форму авторизации/регистрации — полем captcha. Не позволит автоматизировать (затруднит автоматизацию) первых двух шагов (регистрация, авторизация).
3. Проверка вводимых данных публикации. Здесь множество идей для реализации.
а) Отложенное разрешение для публикации сообщений. Пользователь регистрируется, но не может публиковать какие либо сообщения в течении нескольких часов / дней. Спаммер, выполняя задачу размещения публикаций, получит регистрацию в течении сессии работы своего программного обеспечения, но не сможет сразу же воспользоваться данными регистрации. Ему придется запоминать эти данные (автоматизировать этот процесс), а также учитывать время, когда можно будет воспользоваться регистрацией для публикации спама.
б) Ограничить число публикуемых ссылок. Можно ограничить/запретить публикацию ссылок на какой то испытательный срок. При этом ссылками, лично я считаю все вхождения строки ‘http:/’ в сообщение. При этом получается, что такая ссылка
1 |
<a href="href://url">href://url</a> |
считается дважды. Но, на мой взгляд, такое указание на сайт носит неестественный характер, большую ‘спамовость’. Обычный пользователь скорее всего напишет что то вроде:
1 |
сходите по этому вопросу на <a href="http://url">url</a> |
или
1 |
сходите по этому вопросу <a href="http://url">сюда</a> |
Суть на самом деле в том, что спамеры, и это характерно в отличии от пользователя, оставляют более одной ссылки в теле публикации. Таким образом, можно смело ограничить число ссылок — одной ссылкой на публикацию.
Пример реализации hook в drupal для проверки числа ссылок перед сохранением публикации типа forum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { global $user; /* АНТИСПАМ МЕРА - ограничиваем размещение более одной ссылки в сообщениях (исключение составляют пользователи с ролью "редактор") */ if ($op == 'validate') { if ($node->type == 'forum') { //считаем число ссылок $c = substr_count(strtolower($node->body), 'http:/'); if (!in_array('редактор', $user->roles) && $c > 1) { form_error($a3, 'Вы ограничены размещением одной ссылки в одном сообщении.'); } } } } |
в) Функция пожаловаться на спам. Если нормальные пользователи сайта смогут жаловаться на нежелательный контент, то при наличии штатного модератора, можно оперативно бороться со спамерами, и при этом не заниматься сплошной проверкой публикаций пользователей.
г) Белый список почтовых доменов. В этом списке могут быть указаны почтовые сервера, к пользователям которых сервис будет более лоялен, к примеру, не будет отложенного разрешения на публикацию сообщений, ограничения к размещению ссылок и т.п. Почему это работает? Спамеры, очень часто используют для рассылки спама собственные почтовые сервера и созданные почтовые аккаунты на этих серверах. И, что кажется мне логичным, если пользователь имеет в своём почтовом ящике неизвестное имя домена, то нужно отнестись к этому юзеру более осторожно.
д) Ограничение на кол-во сообщений в ед. времени. Эта стратегия также имеет право на жизнь, т.к. задача спамера не просто опубликовать ссылку, но и добиться индексации этой ссылки поисковыми серверами (ПС). А так как не все страницы могут попасть в выдачу, то для страховки можно опубликовать несколько спам-сообщений, и какое то из них да попадет в выдачу, проиндексируется ПС. Когда пользователь за короткое характерное время (в течении 5 мин, к примеру) публикует множество сообщений (3, 5, 10, да еще поперченых ссылками на одни и те же домены), то это скорее всего спамер, можно автоматически блокировать учетную запись, а группу таких сообщений удалять.
Можете продолжить список в комментариях. :)