2009-04-03 23:45:44

Новый антиспам

Про работу JavaScript

В связи с тем что в предыдущем посте в каментах общаются между собой роботы, попробую использовать новую антиспам систему при размещении комментариев.

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

Эффективность нового антиспама будет тестироваться на этом посте (надеюсь что на него накинутся роботы) и еще надеюсь что они не зафлудят мне весь блог ввиду возможных косяков в антиспаме.

В общем ждем, велкам писать каменты...


Update от 5 апреля:

Первый алгоритм оказался неэффективным, робот его с успехом преодолел.

Подробнее о первом алгоритме: изначально ренерируем хэш поста из идентификатора поста, ип-адреса клиента и текущей метки времени; далее случайно выбираем 2 числа (смещение и длину) для выкусывания части хэша и сохраняем их в сессию. В теле формы явно задаем параметр хэш, а смещение и длину получаем при загрузке страницы аяксом и аппендим к форме.

Отсюда мораль, что разнообразные защиты с использованием java скриптов, даже пропущеных через компрессор мало эффективны, тк робот с легкостью справился  с jquery. Хотя возможно это и не так, тк изначально элементы которые аппендятся к форме заданы почи в явном виде, может стоит усложнить java часть и посмотреть что получится.

Но сначала попробуем сыграть на жадности роботов. К форме добавим несколько полей, которые не видны посетителю (скрыты при помощи стилей), но отлично видны роботу, исходя из того, что робот жадный, он будет пытаться заполнить все что только можно. А в коде добавим проверку, если заполнено хотябы одно из этих полей, то не добавляем комментарий, а записываем значения полей в лог.

Посмотрим, сможет-ли робот преодолеть такую систему и что появится в логе...

Update от 6 апреля:

Пожинаем первые успешные плоды За первые 12 часов тестирования в блоге не появилось нового спама, зато было успешно пресечено 6 попыток роботов.

Что интересно: к форме было добавлено 2 поля - одно текстовое, а другое - галочка.Так вот, робот заполняет только текстовое поле, а галку не ставит, при том что галка не единственная, все остальные он ставит. Возможно это связано с тем, что в имени текстового поля встречается name на которое реагирует робот.

Достоверных выводов после одного дня делать рано, продолжаем наблюдать...

Update от 11 мая:

Идея оказалась очень жизнеспособной. За все время наблюдений (более 2 месяцев) в блог пытались добавить комментарии несколько сотнен спамеров, из всего этого числа пролезло только два, и то есть подозрение что это люди. Таким образом принцип антиспасма считаем удачным.