Как стать автором
Обновить

Еще один способ защиты веб-форм от роботов

Время на прочтение3 мин
Количество просмотров6.4K

Предисловие


Выношу на суд читателей хабры свой способ защиты форм от спам-ботов. Способ базируется на том, что большинство ботов не умеют читать таблицы стилей и выполнять коды 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-ей — человеческим вопросом.

Ссылки по теме:


  1. Wikipedia: Глобальная рыночная доля использования браузеров. Подсчет не по-русски.
  2. Spylog: Глобальная рыночная доля использования браузеров. Подсчет по-русски.
  3. Один из алгоритмов взлома графической captcha
  4. Wikipedia: Все о captcha



Любые комментарии, дополнения, замечания приветствуются.
Теги:
Хабы:
+2
Комментарии22

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн