<rmcreative>

RSS

Антиспам без Captcha

8 декабря 2006

В последнее время форумы, гостевые, да и всё, что только можно заполнить страдает от неимоверного количества спама. Это и понятно: спаммеры придумывают всё новые механизмы для своих спам-ботов.

Борцы за чистоту Интернет занимаются примерно тем же, только наоборот: придумывают всё новые методы защиты.

Немного о Captcha

Одним из таких методов является показ верификация при помощи Captcha перед тем, как разрешить пользователю отправить какие-либо данные.

Для справки:

CAPTCHA (английская аббревиатура от «Completely Automated Public Turing test to tell Computers and Humans Apart» — полностью автоматизированный публичный тест Тьюринга для отделения людей от компьютеров) — торговая марка университета Карнеги-Мелона, компьютерный тест, используемый для того чтобы определить, человек ли использует систему. Термин появился в 2000 году. В наиболее распространённом варианте CAPTCHA от пользователя требуется ввести символы, изображённые, как правило, в искажённом виде на предлагаемом ему рисунке, иногда с добавлением шума или полу-прозрачности. Реже применяются CAPTCHA, основанные на распознавании речи (в основном как альтернатива для людей с нарушениями зрения), либо на других вариантах задач искусственного интеллекта.

http://upload.wikimedia.org/wikipedia/commons/6/69/Captcha.jpg

Думаю, всем знакома эта картинка или её вариации.

Но хорошо ли это? Надо ли заставлять пользователя заполнять ненужные лично ему поля? Хочет ли на самом деле пользователь заполнять эти поля?

Неужели бота нельзя отличить по какому-либо другому признаку? Конечно можно!

Способ 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

  1. №658
    romy4
    romy4 28 сент. 2008 г., 3:23:28

    всегда надо надеяться, что бот будет заточен именно под твой сайт. и уже исходя из этого решать задачу о его блокировании.

    простых тупых ботов это конечно отсеивает, но если боты делаются для спама, то их часто затачивают на конкретные ресурсы

  2. №659
    Sam
    Sam 28 сент. 2008 г., 11:41:35

    Затачивают обычно под очень популярные вещи: WordPress, Drupal, vBulletin, IPB. Есть смысл в коммерческом плане. На остальных напускают тупых ботов.

  3. №1322
    Аня
    Аня 28 февр. 2009 г., 20:41:08

    А может кто знает, где можно почитать о том, как исправить такую ошибку: код капчи вводится в форму, а он выдает, что неверный код..Где искать пути решения этой проблемы?

  4. №92
    BorisPlus
    BorisPlus 31 мая 2009 г., 10:10:27

    Да, вариант хороший, но только против "стандартных" ботов. А когда приходиться бороться с версиями одного и того же бота (то есть с целой группой разработчиков спам-бота), то остается только один вариант - рисунок - загадка (их должно быть очень много) - продолжение фразы...

    "А может кто знает, где можно почитать о том, как исправить такую ошибку: код капчи вводится в форму, а он выдает, что неверный код..Где искать пути решения этой проблемы?"

    Думаю, Вам проще обратиться к специалисту (программисту, как понимаю, PHP) и он поможет...а так погуглите по поводу вашей конкретной ошибки и версии капчи...

  5. №2449
    KineticWorld
    KineticWorld 10 апр. 2010 г., 19:25:32

    Програмный генератор скан копий документов(Паспорт гражданина, права...)

  6. №2617
    Александр
    Александр 07 июня 2010 г., 20:08:26

    Не могу никак найти достойную защиту от спама на Vbulletin. Подскажите что-нибудь для версии 4.0.3

  7. №2989
    Вася
    Вася 01 сент. 2010 г., 8:37:14

    Самый лучший антиспам - это когда все сделано, как вы перечислели выше в статье, плюс проверка валидности сообщений вручную, тогда у вас в чате не будет и спама и глупых сообщений типа:

    пользователь: рпввв

    сообщение: лпралпар лаплрпр орпорп

  8. №3926
    Артем
    Артем 16 февр. 2011 г., 15:00:28

    Спасибо, очень хороший способ, и вполне работоспособен, никаких лишних картинок и манипуляций. Но почему вы тогда сами пользуетесь капчей?

  9. №3929
    Sam
    Sam 16 февр. 2011 г., 23:22:11

    Со временем на переделать пока туго.

  10. №6599
    Shlonik
    Shlonik 07 сент. 2012 г., 0:35:54

    Спасибо большое! Использовала способ "Ловушка" в гостевой своего сайта. Работает! Злобный американский бот, атаковавший мою гостевую 10-15 сообщениями ежедневно, больше меня не беспокоит! :)

  11. №10492
    Дмитрий
    Дмитрий 04 мая 2016 г., 11:16:35

    Саша подскажи что за Captcha у тебя тут стоит ?

  12. №10493
    Sam
    Sam 04 мая 2016 г., 20:19:31
  13. №11115
    Valeriu
    Valeriu 29 нояб. 2017 г., 2:46:44

    Александр спасибо за статью. Подход к защите не-обычный. Главное можно применить не только в Yii.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.