Антиспам без Captcha
8 декабря 2006
В последнее время форумы, гостевые, да и всё, что только можно заполнить страдает от неимоверного количества спама. Это и понятно: спаммеры придумывают всё новые механизмы для своих спам-ботов.
Борцы за чистоту Интернет занимаются примерно тем же, только наоборот: придумывают всё новые методы защиты.
Немного о Captcha
Одним из таких методов является показ верификация при помощи Captcha перед тем, как разрешить пользователю отправить какие-либо данные.
Для справки:
CAPTCHA (английская аббревиатура от «Completely Automated Public Turing test to tell Computers and Humans Apart» — полностью автоматизированный публичный тест Тьюринга для отделения людей от компьютеров) — торговая марка университета Карнеги-Мелона, компьютерный тест, используемый для того чтобы определить, человек ли использует систему. Термин появился в 2000 году. В наиболее распространённом варианте CAPTCHA от пользователя требуется ввести символы, изображённые, как правило, в искажённом виде на предлагаемом ему рисунке, иногда с добавлением шума или полу-прозрачности. Реже применяются CAPTCHA, основанные на распознавании речи (в основном как альтернатива для людей с нарушениями зрения), либо на других вариантах задач искусственного интеллекта.
Думаю, всем знакома эта картинка или её вариации.
Но хорошо ли это? Надо ли заставлять пользователя заполнять ненужные лично ему поля? Хочет ли на самом деле пользователь заполнять эти поля?
Неужели бота нельзя отличить по какому-либо другому признаку? Конечно можно!
Способ 1. Ловушка
Просмотрев исходные коды нескольких ботов, я пришёл к выводу, что боты в основной своей массе жадные: пытаются заполнить всё, что находят. Первый способ напрашивается сам собой.
Допустим, у нас имеется форма:
<form action="/register.php" method="post"> <input type="text" name="login" value=""> <input type="text" name="e-mail" value=""> <input type="submit" value="Отправить"> </form>
Добавим фиктивное поле с id=validator:
<form action="/register.php" method="post"> <input type="text" name="login" value=""> <input type="text" name="e-mail" value=""> <input id="validator" type="text" name="validator" value=""> <input type="submit" value="Отправить"> </form>
Допишем CSS для его сокрытия:
#validator{ display: none; }
После этого остаётся поправить скрипт, которым обрабатываются данные из нашей формы:
// Если скрытое поле заполнили if ($_POST['validator']!=''){ die('Ботам ходу нет!'); } else{ // Тут обычная наша старая привычная обработка формы }
Способ 2. Ловушка с подменой
Это всё хорошо, скажут многие, но у нас форум на одном из популярных движков. Под него специальные боты, которые заполняют только нужные поля. Да, всё так, но и тут есть выход.
Возьмём ту же форму:
<form action="/register.php" method="post"> <input type="text" name="login" value=""> <input type="text" name="e-mail" value=""> <input type="submit" value="Отправить"> </form>
Тут уже первый способ не пройдёт. Бот будет чётко заполнять поля login и e-mail. Ну да ладно... меняем форму:
<form action="/register.php" method="post"> <input class="validator" type="text" name="login" value=""> <input class="validator" type="text" name="e-mail" value=""> <input type="text" name="login2" value=""> <input type="text" name="e-mail2" value=""> <input type="submit" value="Отправить"> </form>
Правим CSS:
.validator{ display: none; }
Ну и скрипт:
// Если скрытое поле заполнили if ($_POST['login']!='' || $_POST['e-mail']!=''){ die('Ботам ходу нет!'); } else{ // Тут работаем уже с $_POST['login2'] и $_POST['e-mail2'] }
Заключение
В заключение хочется пожелать всем не следовать за толпой. Будь то использование Captcha или что-то ещё. Относитесь к информации критично, следуйте своим путём.
Комментарии RSS по email OK
всегда надо надеяться, что бот будет заточен именно под твой сайт. и уже исходя из этого решать задачу о его блокировании.
простых тупых ботов это конечно отсеивает, но если боты делаются для спама, то их часто затачивают на конкретные ресурсы
Затачивают обычно под очень популярные вещи: WordPress, Drupal, vBulletin, IPB. Есть смысл в коммерческом плане. На остальных напускают тупых ботов.
А может кто знает, где можно почитать о том, как исправить такую ошибку: код капчи вводится в форму, а он выдает, что неверный код..Где искать пути решения этой проблемы?
Да, вариант хороший, но только против "стандартных" ботов. А когда приходиться бороться с версиями одного и того же бота (то есть с целой группой разработчиков спам-бота), то остается только один вариант - рисунок - загадка (их должно быть очень много) - продолжение фразы...
"А может кто знает, где можно почитать о том, как исправить такую ошибку: код капчи вводится в форму, а он выдает, что неверный код..Где искать пути решения этой проблемы?"
Думаю, Вам проще обратиться к специалисту (программисту, как понимаю, PHP) и он поможет...а так погуглите по поводу вашей конкретной ошибки и версии капчи...
Програмный генератор скан копий документов(Паспорт гражданина, права...)
Не могу никак найти достойную защиту от спама на Vbulletin. Подскажите что-нибудь для версии 4.0.3
Самый лучший антиспам - это когда все сделано, как вы перечислели выше в статье, плюс проверка валидности сообщений вручную, тогда у вас в чате не будет и спама и глупых сообщений типа:
пользователь: рпввв
сообщение: лпралпар лаплрпр орпорп
Спасибо, очень хороший способ, и вполне работоспособен, никаких лишних картинок и манипуляций. Но почему вы тогда сами пользуетесь капчей?
Со временем на переделать пока туго.
Спасибо большое! Использовала способ "Ловушка" в гостевой своего сайта. Работает! Злобный американский бот, атаковавший мою гостевую 10-15 сообщениями ежедневно, больше меня не беспокоит! :)
Саша подскажи что за Captcha у тебя тут стоит ?
Вот эта.
Александр спасибо за статью. Подход к защите не-обычный. Главное можно применить не только в Yii.