Xpoint
   [напомнить пароль]

Простые способы защиты от спама: почта и гостевая

Метки: [без меток]
2007-11-06 10:52:16 [обр] Даниэль Алиевский(0/125)[досье]

Наверно, я плохо искал, тема-то популярнейшая. Но почему-то мне попадались описания только мощных технологий противоспамной защиты. Касперский, captcha, разные интеллектуальные тесты...

Эти методы можно сравнить с Word-ом для набора текста или IDEA для набора программы. Но ведь весьма часто и тексты, и программы вполне можно - и, в самых простых случаях, даже удобнее - набирать в Notepad! Или в одном из множества бесплатных редакторов типа Notepad++.

Со спамом та же ситуация. На очень посещаемом портале типа mail.ru или LJ без регистрации с использованием capctha никак не обойтись. И даже этого может оказаться мало. А открытые почтовые ящики необходимо всячески защищать. Но, казалось бы, зачем палить из такой пушки в случае самого рядового воробья - обычного сайта с обратной связью?

У меня обратная связь выражается в виде обычного email плюс тривиальная самописная гостевая книга (скрипт строк на 200). Сайт достаточно посещаемый и с хорошим рейтингом, так что, конечно, и то, и другое оказалось заваленным спамом. Но я изобрел два очень простых метода, соответственно для защиты email и гостевой, и вроде бы они (пока) работают. Так что, во-первых, хочу поделиться, во-вторых, спросить: кто знает аналогичные по простоте техники? Может я велосипед изобрел, мне просто не попался адрес велосипедного магазина?

Итак, почта. У меня на сайте в соответствующих местах указано несколько адресов (самые обычные ссылки типа mailto:), но в этих адресах заранее "прошит" Subject: <a href="mailto:lalala@lalala.net?subject=kukuku">Daniel Alievsky</a> Здесь kukuku - заголовок, соответствующий контексту, скажем, "вопрос по lalala" или "связаться с автором lalala". В заголовке, разумеется, есть ключевое слово lalala.

Что делает спам-робот, собирающий ссылки? Естественно, заменяет subject своей глупостью - "купите дешево bebebe". Зачем ему рекламировать мой же lalala, ясно же, что эдак я не куплю ничего. Что делает нормальный ленивый пользователь? Щелкает по ссылке и радуется, что не надо заполнять subject. В очень, очень редком случае что-нибудь приписывает или меняет, но главную вещь lalala, про которую задается вопрос, оставляет. Остается настроить фильтр в почтовом клиенте (или сервере) и читать только письма, в которых subject содержит lalala. Да, теоретически, так можно потерять какого-нибудь "чересчур умного" посетителя, но я думаю, что если человек действительно хочет связаться, то он будет пробовать так и эдак. Особенно если явно написать про это рядом со ссылкой. А если не хочет, то нечего и отвлекать меня.

Гостевая. Тут чуть хитрее. Вначале я просто запрещал оставлять в сообщениях любые ссылки. Но, как ни странно, это не помогло. Меня заваливали совершенно бессмысленными постингами "ваш сайт очень крут!" А также рекламой без ссылок, где обстоятельно рассказывалось про какие-нибудь курсы и рекомендовалось позвонить туда-то и туда-то.

Сейчас метод другой. Форма содержит hidden-поле, содержащее число секунд от 1.01.1970, преобразованное по нехитрой формуле. Поле, естественно, заполняется JavaScript. (Тем долям процента посетителей, которые не желают включать JavaScript, ничто не мешает связаться при помощи email. Я даже могу опубликовать их сообщение, если сильно попросят.) На сервере я восстанавливаю присланное время и сравниваю с часами сервера, естественно, по Гринвичу. Если расхождение превышает сутки - очевидно, это либо спам, либо у пользователя сбились часы. Я выдаю сообщение: "извините, у вас сбились часы, настройте, пожалуйста".

Спам прекратился начисто.

Естественно, такие методы не помогут против спамера, который целенаправленно атакует мой сайт, чтобы заблокировать мою связь. Но, тьфу-тьфу, вроде нет у меня таких врагов. Коммерчески это довольно бессмысленное предприятие - как и для 99.99% всех прочих сайтов. Атаковать mail.ru интересно хотя бы ради престижа, но мой сайт не настолько популярен, чтобы быть "на слуху" у всех юных хацкеров. Опять же, как и 99.99% прочих сайтов.

Метод защиты гостевой не сработает против спам-робота, который интерпретирует JavaScript: скажем, использует ActiveX MSIE для загрузки страниц, заполнения форм и эмуляции нажатия "правдоподобной" кнопки. Но усовершенствовать мою защиту совсем несложно, ценой минимальных неудобств для пользователя. Куча способов. Можно измерять время от открытия страницы до нажатия кнопки: человек не может мгновенно записать свое сообщение. Можно следить за мышкой: перед тем как щелкнуть по кнопке, мышка, управляемая человеком, наверняка проделает некий путь. Можно добавить простейший контрольный вопрос. Можно сделать кнопку "Send" картинкой с реакцией на onClick, а роботу "подсунуть" фальшивую невидимую кнопку "Submit". И так далее. Именно изобилие подобных возможностей, по-моему, делает нереальным создание универсального и полезного робота, преодолевающего все эти хитрости и рассылающего спам по тысячам сайтов. По меньшей мере это коммерчески бессмысленно - учитывая изобилие прекрасно работающих тривиальных методов спам-рассылок.

Что скажете? Может, есть еще какие-то аналогичные, столь же незатейливые трюки, но эффективные в подавляющем большинстве ситуаций?

спустя 44 минуты [обр] GRAy(0/259)[досье]
То что касается hidden-поля - таки изобрели ;). Читал это где-то год назад. Помимо timestam`а там ещё предлагается делать специальные honeypot-поля которые человек не будет заполнять (скрытые, или просто написано чтобы он их не заполнял), а робот попытается.
спустя 1 час 10 минут [обр] Marat Tanalin(0/78)[досье]
Можно добавить простейший контрольный вопрос.
Кстати, наиболее простой и эффективный (и потому довольно популярный в последнее время) способ защиты для сайтов, посещаемых достаточно, но не настолько, чтобы спамерам было целесообразно ради отдельного сайта реализовывать схему трансляции контрольного вопроса на какой-нибудь порносайт с просьбой ответить на него живого посетителя последнего.
спустя 4 часа 43 минуты [обр] Даниэль Алиевский(0/125)[досье]
GRAy[досье]
Вот ведь, теперь я тоже припомнил, что читал что-то такое, и даже по-русски :) Ну ничего, изобрел и изобрел. А статья полезная, спасибо.
спустя 3 года 3 месяца [обр] Евгений Седов aka KPbIC(4/176)[досье]
GRAy[досье] Мне в основном попадались ленивые, небрежно написанные роботы, которые поступали ровно наоборот — не заполняли и не отсылали видимые необязательные поля. Если в этом случае в необязательное поле поставить дефолтным значением пустую строку, то на сервере по этому признаку можно устроить отсев.
Powered by POEM™ Engine Copyright © 2002-2005