Предисловие
Выношу на суд читателей хабры свой способ защиты форм от спам-ботов. Способ базируется на том, что большинство ботов не умеют читать таблицы стилей и выполнять коды javascript. Зато около 90% всех браузеров поддерживают эти технологии. Остальные 10% — это старые браузеры и браузеры с отключенным javascript. Если вдуматься, то навряд ли пользователи этих 10% имеют своей целью пользоваться формами обратной связи, регистрации на форумах, гостевых и пр. Сейчас вкратце рассмотрю способы борьбы с таким спамом на сегодняшний день.
Существующие способы борьбы и их минусы
Способы:
- Использование CAPTCHA
- Комбинирование перечисленных способов
Минусы:
К минусам можем отнести раздражение пользователя, которого заставляют решать головоломки, угадывать числа, буквы. Дальше, большинство сегодняшних графических капчей являются так называемыми «слабыми капчами» и взламываются с помощью нехитрых серверных скриптов OCR. Здесь также стоит упомянуть «метод леммингов», где в процессе распознавания капчи принимают участие множество настоящих людей: спамеры переразмещают вопрос/картинку со взламываемого сайта на специальных сайтах с высокой посещаемостью, где, чтобы получить доступ к информации человек разгадывает таку капчу и передает результат спамерам. Еще метод поинтересней — прямой наем людей для отгадывания.
Суть моего способа
На странице создаем фиктивную форму и прячем ее поля от глаз пользователя, используя элемент таблицы стилей display:none. Далее, запустив на странице определенную javascript-функцию где-то за пределами фиктивной формы, выводим вместо нее настоящую с действительными названиями полей. При отправке роботом фиктивной формы, интерпретатор получает массив с неверными названиями и, например, выводит сообщение об ошибке. В случае же с реальным пользователем, форма обрабатывается нормально.
Преимущества:
- 95% гарантия отсечения спам-бота
- отсутствие нужды для человека разгадывать captcha
- простота реализации для разработчика
- нагрузка на спамерский сервер из-за потребности выполнять javascript и css
Минусы:
- Рано или поздно взломают
Реализация
Основная часть работы выполняется на стороне клиента с помощью CSS и Javascript. С
помощью CSS, который желательно подключать к странице из отдельного файла, прячем
форму-ловушку от глаз пользователя:
#ourGreatForm {display:none;}
Дальше пишем простой javascript (кстати, тоже можно вынести в отдельный файл), со следующим содержанием:
function GenerateSomethingGreatForRealPeople() { // Объявляем о нашей переменной var ourfields = '<input type="text" name="sndr_name"><br>'+ '<input type="text" name="sndr_email"><br>'+ '<textarea name="sndr_content"></textarea><br>'+ '<input type="submit" name="sndr_pressed_button" value="Отправить письмо">'; // Заменяем подставные поля на тех машинах, где выполняется Javascript document.getElementById("ourGreatForm").innerHTML=ourfields; // Включаем отображение реальных полей document.getElementById("ourGreatForm").style.display="block"; }
Все элементы формы-ловушки помещаем между тегами . Значение идентификатора должно совпадать со значением внутри описанной выше javascript-функции:
<!-- Это форма ловушка --> <form method="post"> <div id="ourGreatForm"> <input type="text" name="name" value="фиктивное поле" ><br> <input type="text" name="email" value="фиктивное поле" ><br> <textarea name="content">фиктивное поле</textarea> </div> </form>
После формы, где-то в конце документа запускаем нашу javascript-функцию, если перед нами настоящий браузер:
GenerateSomethingGreatForRealPeople()
В результате выполнения этой функции фиктивное содержимое формы меняется на настоящее и происходит включение отображения формы пользователю.
Пример
Страница в действии
Выводы
Способ зарекомендовал себя, как отличное оружие против спама, сведя его практически на нет на тех сайтах, где было осуществлено его внедрение. Целевая аудитория пользователей способа — сайты с небольшим траффиком. Такая защита действенна против ботов, размещенных в основном на хостинг-серверах общего пользования, не умеющих работать с javascript и css. Через некоторое время, я уверен, спамеры напишут программулину для обхода и этого способа, но только в том случае, если использование этого способа станет массовым. Для усиления защиты от спам-ботов можно считать комбинирование моего метода с captcha-ей — человеческим вопросом.
Ссылки по теме:
- Wikipedia: Глобальная рыночная доля использования браузеров. Подсчет не по-русски.
- Spylog: Глобальная рыночная доля использования браузеров. Подсчет по-русски.
- Один из алгоритмов взлома графической captcha
- Wikipedia: Все о captcha
Любые комментарии, дополнения, замечания приветствуются.