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

  1. Вместо содержимого атрибута action формы пишем “#”. Должно быть так:
    <form action="#" method="post" id="commentform">
  2. В тэг textarea добавляем строчку:
    onfocus="js_antispam_act('/wp-comments-post.php')"
  3. В кнопку отправки формы (submit) добавляем:
    disabled="disabled"

Принцип работы спам ботов

… я не нашёл. Обрыл гугл, а не нашёл. Если у когото завалялась ссылка, или кто-то гуглить умеет лучше меня, скиньте линк, пожалуйста.

Другие антиспам-системы

В основном на блогах используют Akismet, SpamKarma2 и Captcha. Множество альтернативных способов, таких как скрытие полей с помощью CSS, использование картинок животных, мужчин и женщин не прижилось.

На данный момент отмечу самые эфективные:

  • Akismet – входит в стандартный пакет WordPress. Работает неплохо, но бывает съедает валидные комментарии. Из-за этого многие переходят на SpamKarmu
  • SpamKarma2 – сейчас наиболее мощный антиспам плагин. Но в связи с его популярностью думаю не на долго. Спамеры не спят и постоянно совершенствуют свои боты.
  • Cryptographp – эфективный, но неудобный способ. Доходит до того, что не только боты, но и люди не могут разобрать, что изображено на картинке. С этим способом бывает перебарщивают. Да и вообще, кому нравится комментируя постоянно заниматься разбором ребусов?
  • и ещё один способ работающий у pmaster‘a, где нужно в поле написать сумму двух цифр. Вроде сбоев не было, но тут тоже есть ньюанс, о котором писал Андрей.

Эксперимент

Я SpamKarma2 уже отключил. Будем посмотреть, что получится. Конечно же скрипт не эталон, а на спаммеров работают хорошие программисты. Но всё же, учитывая тот факт, что мой блог не столь популярен и этот скрипт не так распрастранён, как другие, то можно надеяться на долгую работу.

Предлагаю желающим поучавствовать в эксперименте, выполнить инструкцию и отписаться в комментах. Кто не хочет учавстовать – тоже пишите. :)

P. S. Из-за плагина toodoo.ru перестали отображаться ошибки о не введённых данных в форму отправки комментария. Поэтому я его отключил.

Дата: 29.08.2007
»
Категории: JavaScript | Wordpress
Google     

]]> Никита ]]>

Эксперимент провалился почти сразу. Уже получил комментарий первого спаммера. Похоже что спам боты умеют читать 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. Да, знаю-знаю, всё экспериментирую… ничего, ещё редизайнов будет, мама-не-горюй

»

Напишите комментарий