Каждый, у кого есть сайт с возможностью обратной связи, рано или поздно сталкивается с проблемой спама. Умные роботы бродят по сети и оставляют рекламу в комментариях, на форумах и везде, куда могут что-то ввести.
Не минула сия участь и меня. Ко мне стали регулярно наведываться спаммерские боты. Не смотря на то, что у меня есть некоторая защита, некоторые все равно умудряются оставлять "комментарии" рекламного характера.
В этой небольшой заметке хотел поговорить о том, как можно защищаться от спаммерских машинок.
Задача, как всегда, звучит просто: нужно отличить робота от человека. Соорудить тест Тьюринга, который не будет по-возможности, утруждать нормальных пользователей (в этом месте боты должны возмутиться по поводу дискриминации).
Знакома ли вам такая картина?
Это и есть пример капчи. Суть проста: роботу трудно определить что нарисовано на рисунке, а человеку — не так уж и сложно. Выводим картинку и просим пользователя ввести в поле то, что на ней нарисовано. Многим ботам это будет не по-зубам. Однако, некоторым людям тоже...
Тест Тьюринга — тест, предложенный Аланом Тьюрингом в 1950 г. в статье «Вычислительные машины и разум» (Computing machinery and intelligence) для проверки, является ли компьютер разумным в человеческом смысле слова. Тьюринг предложил тест, чтобы заменить бессмысленный, по его мнению, вопрос «может ли машина мыслить?» на более определенный.
Тест должен проводиться следующим образом. Судья (человек) переписывается на естественном языке с двумя собеседниками, один из которых — человек, другой — компьютер. Если судья не может надежно определить, кто есть кто, считается, что компьютер прошел тест. Предполагается, что каждый из собеседников стремится, чтобы человеком признали его. Чтобы сделать тест простым и универсальным, переписка сводится к обмену текстовыми сообщениями.
Переписка должна производиться через контролируемые промежутки времени, чтобы судья не мог делать заключения исходя из скорости ответов. (Во времена Тьюринга компьютеры реагировали медленнее человека. Сейчас это правило необходимо, потому что они реагируют гораздо быстрее, чем человек.)
Итак, мы поняли, что капча - недостаточно хороша, однако, это — самый надежный метод.
Если вы решили сделать капчу wordpress - эта статья вам поможет. Все-таки Wordpress - самая популярная блоговая платформа на текущий момент.
Этот метод был предложен SamDark и подробно описан у него на сайте. Не вижу смысла цитировать его здесь, скажу лишь, что он основан на том, что многие боты видят то, что не видят обычные пользователи, поэтому они будут заполнять даже невидимые поля. На этом их и можно подоловить.
У меня в комментариях реализован именно этот метод защиты. Не знаю, на сколько он эффективен, ибо мне не с чем сравнивать. Дело в том, что я сразу внедрил этот метод защиты к себе. И, должен сказать, до сих пор не знал бед. Однако, сейчас нашлась парочка ботов, которые обходят и эту защиту. Конечно, можно было бы переставить поля местами, изменить разметку, имена полей, но это решило бы проблему только частично, если решило бы вообще.
Этот метод предлагает пользователю решить простой пример или ответить на простой вопрос. Похожая защита есть в спам-фильтрах некоторых icq-клиентов. Там незнакомцу предлагается сначала ответить на вопрос: "Как называется наша планета?". Если ответ "Земля" — незнакомец признается человеком. Если что-то другое — ботом.
Такой метод защиты реализован у Дмитрия Сергеева, если интересно — сходите, посмотрите. (К тому же, он интересно пишет)
Цель спама — установка ссылок на свой сайт на чужом. При этом, происходит накрутка PR рекламируемого сайта. Конечно, есть еще рассчет на переходы, но кто станет тыкать по ссылке, оставленной не в тему? Да и траффик вряд ли будет тематическим.
Некоторые, рассуждая так, просто убирают возможность оставлять в комментариях ссылки. Иногда это может быть хорошим решением.
В последнее время мастера все больше тяготеют к JS как к средству борьбы со спамом. Довольно интересные есть разработки. Скажем, как вам решение: отправка формы путем ее перетаскивания? Бот явно не сможет перетащить форму. К тому же, большниство ботов не обрабатывает JavaScript.
Но стоит задуматься. Форма отправилась. На сервере мы ее приняли. А как серверная часть узнает, как была отправлена форма? Правильно: при переносе формы на область, вместе с данными формы отправляется еще один, дополнительный параметр, наличие которого и проверяется на сервере. Дело за малым: научить бота вычленять этот параметр и досылать его.
И действительно. Ведь у каждого бота есть ip! Нужно собирать базу ip ботов и каждый раз, при определении "вшивости" пользователя, проверять его ip по этой базе. Если он в ней есть — в топку.
Но и у этого метода есть недостатки. Во-первых, этот метод не станет работать сразу. Чтобы он начал эффективно работать, нужно накопить базу ip-адресов спаммерских ботов, а это длительное и трудоемкое занятие.
Во-вторых, нужно не забывать про прокси. Конечно, вряд ли спаммерские боты будут ходить через прокси, но все же, если какой-то придет, и мы добавим адрес прокси в бан-лист, то все пользователи с этого прокси не смогут пользоваться сайтом полнофункционально. А это уже удручает.
Стоит в самом конце, но не по значению. Пусть каждое сообщение хранится в базе, но не отображается другим пользователям до тех пор, пока администратор сайта не разрешит. Так можно быть на 100% уверенным, что спама на сайте не будет.
Теперь о недостатках. Их тоже хватает. Думаю, не стоит говорить о том, что для того, чтобы эта схема работала, администратор сайта должен постоянно быть в курсе добавления комментариев. Ни о каких выходных речи быть не может. А если админ уехал в отпуск туда, где нет интернета? Весь сайт будет стоять, а комментарии не будут добавляться. Ну и потом, это же дополнительная работа! А если в день поступает сотня комментариев? Это сколько нужно времени потратить на то, чтобы их все проверить? В общем, на любителя.
Хотите рецепт от спама? Не давайте на своем сайте пользователям возможность оставлять какие-нибудь сообщения. Это, пожалуй, единственный способ уберечься. Однако, с точки зрения военной, это — признание поражения. А мы не сдаемся и будем продолжать воевать со спаммерами.
Кстати, добавил сбор статистики в комментариях. Теперь собираются некоторые данные о всех, кто оставляет комментарии. Друзья, большой брат следит за вами!