zed.0xff.me

защищаем блог от спама: honeypot

(warning! статья не содержит чего-то принципиально нового или доселе неизвестного)

Не люблю всякие капчи.. иногда, конечно, это неизбежное зло, и без них не обойтись..
Но в некоторых случаях – можно.
В частности – если надо защитить от спама комментарии в каком-нибудь маленьком бложике, типа моего :)
И тут на помощь нам приходит волшебный горшочек с мёдом !! т.е. honeypot

Суть технологии в том, что мы специально “мажем мёдом” некоторое место на сайте, и все спамботы дружным строем летят на.. вобщем как раз на намазанное и летят.

Для начала разберем логику действия спамбота: Что бы я сделал, если бы был спамботом?..
Я бы бегал по сайтам, и искал бы места куда бы приткнуть что? Правильно, спамерский текст с кучей ссылок на левитру и прочую гадость. (а последнее время стало модно спамить вообще на не знаю каком языке – “qlqatttxqw, mtwpfuoykqqd и даже ddpledldefkf!”)

Но что-то я отвлекся.. Так вот, суть бота – напихать в чужие бложики кучу ссылок на важный хозяину бота контент. В частности в поля с именем comment или post[text], но не факт что в этих полях ссылки парсятся движком бложика. А особенно вкусными для бота являются поля website, url и т.п. Потому что ясно, что урл всё-таки не просто так поле, а, с достаточной вероятностью, будет оформлено ссылкой..
Ну и бот радостно бросается заполнять эти поля.. :)

А мы:

  • поля эти простым человеческим юзерам не показываем (CSS в помощь)
  • от особо умных ботов слега жонглируем CSS-стилями у себя в server-side
  • особо-преособо умные боты пока не приходили. ждем в гости! :)

Ну и еще одна небольшая хитрость. Если бот не совсем-совсем туп, то он после поста страничку попытается GET-нуть, чтобы посмотреть отложилась там его хм.. вобщем его продукт жизнедеятельности.
Но и тут мы его радостно обманем, запомнив предварительно у себя в обработчике POST-а всё то что он хотел нагадить – запоминаем в для него созданную персональную сессию. И потом на его GET это дело в каком-нибудь укромном месте странички вываливаем. Бот видит что оставил след, и, довольный, идет дальше своей дорогой продолжать делать своё грязное дело..

А сессия с его данными через некоторое время успешно протухает, и, собственно, всё что от визита бота остается – это несколько строчек в access.log.

Подводя итог:

Человек невидимые поля не видит, и заполнять их не будет. Браузерное автозаполнение тоже особо не замечено в попытках в невидимые поля что-то записать. А боты в основном рассчитаны на количество, а не на качество. Но если уж кто-то пишет специального бота именно под ваш бложик – значит ваш бложик уже достаточно вырос, и пора применять более серьезные методы защиты..

За примером далеко ходить не надо – желающие могут заглянуть в код этой страницы, пониже, там где комментарии.