Antispam для WordPress своими руками. Эксперимент.
Идея взята из переписки Typo3-девелоперов.
Смысл
Смысл идеи в том, чтобы изначально отключить отправку формы и убрать адрес отправки из атрибута action формы. Через три секунды после активации поля ввода textarea в атрибут action добавляется url страницы обрабатывающей форму, а так же активирует кнопку submit.
JavaScript
Поскольку этот скриптовой язык в последнее время стал мегапопулярным, мы можем не бояться, что потеряем комментаторов. Исключение составляют принципиальные и пользователи мобильных устройств с браузерами не поддерживающими JS.
Сам код
Сам код очень простой и состоит из трёх функций, из которых две обязательные, а одна вспомогательная:
// Создаём переменную для таймера
var tim
// Возвращаем ссылку на DOM объект по его id. Эта функция вспомогательная,
// без неё можно обойтись, если получать ссылку на объект в функции js_antispam
function getEl(objname){
obj = document.getElementById(objname)
return obj
}
// Активируем кнопку отправки и прописываем url в атрибут action формы
function js_antispam(url){
getEl("commentform").action = url
getEl("submit").disabled = false
clearTimeout(tim)
}
// Запускаем таймер, который по истечении 3 секунд выполнит функцию js_antispam,
// передав ей url для action формы.
function js_antispam_act(url){
tim = setTimeout("js_antispam('"+url+"')", 3000)
}
Правим шаблон WP – comments.php
- Вместо содержимого атрибута action формы пишем “#”. Должно быть так:
<form action="#" method="post" id="commentform"> - В тэг textarea добавляем строчку:
onfocus="js_antispam_act('/wp-comments-post.php')" - В кнопку отправки формы (submit) добавляем:
disabled="disabled"
Принцип работы спам ботов
… я не нашёл. Обрыл гугл, а не нашёл. Если у когото завалялась ссылка, или кто-то гуглить умеет лучше меня, скиньте линк, пожалуйста.
Другие антиспам-системы
В основном на блогах используют Akismet, SpamKarma2 и Captcha. Множество альтернативных способов, таких как скрытие полей с помощью CSS, использование картинок животных, мужчин и женщин не прижилось.
На данный момент отмечу самые эфективные:
- Akismet – входит в стандартный пакет WordPress. Работает неплохо, но бывает съедает валидные комментарии. Из-за этого многие переходят на SpamKarmu
- SpamKarma2 – сейчас наиболее мощный антиспам плагин. Но в связи с его популярностью думаю не на долго. Спамеры не спят и постоянно совершенствуют свои боты.
- Cryptographp – эфективный, но неудобный способ. Доходит до того, что не только боты, но и люди не могут разобрать, что изображено на картинке. С этим способом бывает перебарщивают. Да и вообще, кому нравится комментируя постоянно заниматься разбором ребусов?
- и ещё один способ работающий у pmaster‘a, где нужно в поле написать сумму двух цифр. Вроде сбоев не было, но тут тоже есть ньюанс, о котором писал Андрей.
Эксперимент
Я SpamKarma2 уже отключил. Будем посмотреть, что получится. Конечно же скрипт не эталон, а на спаммеров работают хорошие программисты. Но всё же, учитывая тот факт, что мой блог не столь популярен и этот скрипт не так распрастранён, как другие, то можно надеяться на долгую работу.
Предлагаю желающим поучавствовать в эксперименте, выполнить инструкцию и отписаться в комментах. Кто не хочет учавстовать – тоже пишите.
P. S. Из-за плагина toodoo.ru перестали отображаться ошибки о не введённых данных в форму отправки комментария. Поэтому я его отключил.





]]>Никита]]>Эксперимент провалился почти сразу. Уже получил комментарий первого спаммера. Похоже что спам боты умеют читать javascript или вообще как-то по своему обходят защиту.
Есть другая идея, буду её курить.
»]]>mikolka]]>К принципам работы спам-ботов: в Хакере статейка была о методах борьбы с ними и принципе действия:
»http://www.xakep.ru/post/36312/default.asp
Может ты такую не видел?
]]>Никита]]>Это не совсем то. Мне инетресен принцип отправки формы спам ботом.
»]]>Maxoud]]>Грубо говоря: бот пробивает страницу на наличие формы с полями input name=’author’, name=’email’, name=’url’ и т. п. А потом по HTTP (POST) “заполненную” форму на адрес, прописанный в form action=’/path/to’.
»]]>Никита]]>Если бы это было так, то у меня форма бы не отправлялась, так как поле action не заполнено, а заполняется оно только через три секунды после активации пользователем поля комментария. Есть догадка, что роботы знающие, что это система wordpress, сами подставляют адрес: wp-comments-post.php
»]]>Сергей]]>Научились ли уже спамеры выполнять ява-скрипты перед отправкой формы ? Если научились, то все фокусы на стороне браузера не помогут. Я думаю, что не могут, хотя после просмотра http://www.perceptivepixel.com/ начинаешь поверить в компьютерные чудеса
В вашем случае спамер мог “эмпирически” вытащить url из строки
onfocus=”js_antispam_act(‘/wp-comments-post.php’)”
Может, изменить скрипт слегка ? Добавить в форму hidden-поле и устанавливать его значение через 3 секунды:
setTimeout(“function(){getEl(’secretdata’).value = 2+2;} “, 3000)
А в скрипте-обработчике добавить проверку:
if($_GET['secretdata']!=’4′) { die ’spam’; }
И если спамеры пройдут, значит они точно умеют выполнять ява-скрипт
»]]>Maxoud]]>Забыл написать, что адрес известен
.
»В принципе, у каждого движка есть отпечатки, по которым он вычисляется. Есть такое чтиво – Основы парсинга для новичков. Там как раз описывается использование спамерами “стандартностей” движков.
]]>Никита]]>Сергей, я читал, что скрытые поля они давно научились “вскрывать”. А сложение цифр, кстати, реализовано у pmaster’a. http://blog.pmaster.net/
Не знаю на сколько оно эфективно, но если бы не было эфективно, то он бы это заменил на что-нибудь другое.
По поводу адреса, как я уже написал, скорей всего спаммер просто знал куда отправлять форму.
Maxoud, спасбо за ссылку.
»]]>pmaster]]>Эффективно! =)
P.S. С новым дизайном – практически перестал заходить на блог. Читаю только rss. Вот как-то так… =(
»]]>Никита]]>Вот, господа, смотрите и учитесь. ))
P. S. Да, знаю-знаю, всё экспериментирую… ничего, ещё редизайнов будет, мама-не-горюй
»