Прощай, CAPTCHA! CAPTCHA, прощай?
Как известно, в своей наиболее распространённой реализации CAPTHA представляет собой набор трудноразличимых символов, которые необходимо ввести, чтобы совершить некоторое действие (отправить комментарий, скачать файл и т.д.). Данный метод является весьма эффективной мерой защиты от ботов, но зачастую доставляет неудобства собственно людям (вспомним Rapidshare с её кошками и собаками). Поэтому я не люблю использовать CAPTCHA в своей работе и поделюсь некоторыми хитростями, которые помогают мне избежать её использования.
- Этот тест оказался очень трудным. Были показаны несколько неизвестных мне картин и требовалось определить художника, изображённый эпизод и год создания картины.
- Ух ты! Кажется, это действительно трудно! Ты сдал экзамен и получилил докторскую степень?
- Какой экзамен? Какая степень? Это была CAPTCHA
В будущем искушённые капчи смогут защитить от любого бота
Способ первый (олдскульный)
В форме заменяем названия полей с традиционных Name, URL, Email и т.д. на наборы случайных символов (я пользуюсь генератором паролей). В итоге форма выглядит примерно так:
<input type="text" name="F1gmT23R" />
<input type="text" name="auIQBrSp" />
Ну и соответственно в принимающем скрипте вместо $_POST['url'] используем $_POST['auIQBrSp'] и т.д. За несколько лет использования этого метода его КПД составил 100%! Единственный, хоть и маловероятный, минус - кому-нибудь в голову может прийти идея написать бота, “заточенного” под вашу форму. В таком случае можно придумать какую-нибудь “скользящую” систему, которая меняет случайным образом названия полей и попутно отправляет информацию, позволяющая скрипту определить что куда записывать. Достаточно тривиальная задача для толкового программиста.
Способ второй (новомодный)
Как роботы находят форму, прежде чем её заполнить и отправить? Они парсят страницу, находят инпуты, составляют post-запрос, который и отправляют на сервер. Избавляемся от олдскульной школы - используем AJAX! Сокращаем до минимума тег <form> (я бы вовсе от него отказался, да боюсь, что фанаты семантики запинают), дабы скрыть путь к скрипту-обработчику. Вместо name в инпутах используем id, а вместо <input type="submit" /> - <input type="button" /> или вовсе обычную ссылку (текст или картинку) с повешенным на onclick обработчиком формы. Для полноты картины можно вдобавок применить первый метод для маскировки id и, если есть желание, зашифровать javascript-функцию. В скрипте на стороне сервера ещё бы неплохо определять, откуда пришёл запрос.
Капчи помогают против спам-ботов, но не спасут от т.н. “смошников”, которые оставляют более-менее вразумительные комментарии, дабы усыпить бдительность модератора и протащить свой коммент вместе с рекламной ссылкой. Существуют различные способы борьбы с этой напастью, один навороченнее другого. Я бы предложил массовые расстрелы, но будучи далёким от экстримизма, представляю
Способ борьбы со смошниками (иезуитский)
Не надо бороться с этими “манимейкерами” (что с юродивых взять?). Необходимо уничтожить спрос на такие услуги, дабы исчезло и предложение. Для этого нанесём удар по заказчикам спама, по самому больному месту - по карману
Спам-ссылки оставляют в большей мере ради индексации поисковиками, нежели ради надежды на случайный заход на сайт. Потому вместо нерабочего rel="nofollow" для маскировки используем javascript - в теле ссылки в комментариях вместо href="http://spam-link.com" прописываем конструкцию href="javascript:void(0)" onclick="window.open('http://spam-link.com'); return false". Заказчик спама, проверяя выполненную работу, видит кликабельные ссылки, вот только позиция в поисковиках остаётся неизменной. Какая досада…
Демонстрация на примере WordPress. Открываем файл wp-includes/comment-template.php, ищем функцию get_comment_author_link() и в ветке после else прописываем:
$return = '<a href="javascript:void(0)" onclick="window.open(\'' . $url . '\'); return false" rel="external nofollow">' . $author . '</a>';
Можно придумать какой-нибудь плагин, который для комментов от проверенных людей оставляет прямые ссылки (нам ведь не жалко, да?), для всех прочих - через javascript. Ну а дальше сами решите, что делать дальше с подобными комментариями.
Замечания и предложения оставляйте в комментариях ![]()




Leave a comment