Pull to refresh

Методы защиты веб-формы без капчи

Website development

О чём речь?


В последнее время на Хабре было предложено довольно много идей для капчи. Сложная, умная, смешная, капча остаётся одним из основных способов защиты формы от ботов.

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

В этом обзорном посте я бы хотел рассмотреть незаметные для пользователя методы защиты от ботов.

Методы защиты



Минимальное время заполнения формы

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

Скрытое поле

Этот метод может показаться странным, но он, похоже, работает. К форме добавляется скрытое поле (скрытое в смысле display:none). Если поле заполнено, то пользователь считается ботом.
Удивительно, но многие простенькие боты заполняют все неизвестные поля.

Обфускация или шифрование HTML

Исходный код страницы является, по сути, вызовом javascript функции вроде document.write( decode( encodedHTML ) ), где encodedHTML — это как-то зашифрованный HTML.

Методы шифрования могут варьироваться от простого эскейпирования значений буковок (буква превращается '%код' ) до некоторых алгоритмов шифрования (например, простенький XOR).
В интернете есть много готовых решений, например, вот тут.

Блокирование определённых user-agent

Некоторые боты используют весьма специфические заголовки user-agent. Можно блокировать запросы не содержащие user-agent вообще или содержащие заведомо плохой заголовок.

В интернете есть списки таких заголовков. Вот, например, от некого Нила Гантона.

«Ловушка» для ботов

Суть этого метода заключается в создании специального раздела сайта вроде "/bot/guestbook". Ссылка на этот раздел не видна для пользователя, однако если бот зайдёт в этот раздел и сделает там хоть что-нибудь, то его IP тут же блокируется.
Раздел должен содержать лакомые для бота слова вроде «email», «submit», «add comment» и тому подобные. Файл «robots.txt» предупреждает хороших ботов.

Хеширование формы (BarsMonster)

При сабмите формы на сервер вычисляется хеш полей формы и добавляется в одно из специальных скрытых полей. Сервер проверяет значение хеша.

Использование прозрачных кнопок (BarsMonster)

У формы есть несколько кнопок типа <input type="image". Лишь на одной из картинок написан текст, остальные — прозрачные. Для сабмита пользователь должен нажать на картинку с текстом.

Динамическое создание формы (maxshopen)

Сама форма полностью создаётся javascript-методом динамчески. Таким образом, форму может увидить лишь пользователь, у которого отработал соответствующий скрипт.

Использование сторонних сервисов (le0pard)

Можно туннелировать трафик через специальный сервис, предназначенный для анализа контента на спам. Примером такого сервиса может быть Akismet

Гибридный подход

По умолчанию форма защищена каким-либо javascript-методом (динамическое создание формы или шифрование данных) или методом из приведённых выше. Если форма была засабмичена некорректно, то возвращается ошибка и просьба заполнить не очень простую капчу.

Важные замечания


Раз. Приведённые выше методы не являются универсальной защитой от ботов. Они не спасут от прямой атаки, но смогут помочь от ботов-пауков.

Два. Пост не рассматривает слабые стороны методов. Это можно обсудить в комментариях.

Три. Заинтересовавшимся рекомендую почитать пост некого Нила Гантона (на английском).

UPD: Добавил несколько методов из комментариев. Спасибо, BarsMonster.

UPD2: Добавил ещё один метод из комментариев.
Спасибо, maxshopen, за отличную критику методов.

UPD3: Добавил ещё один метод из комментариев. Спасибо, maxshopen.

UPD4: Добавил ещё один метод из комментариев. Спасибо, le0pard.
mprokopov кинул ссылку на спам-блок плагин для рельсов: snook

Заключение


Увы, мне удалось найти не так много методов защиты веб-форм.

А какие ещё безкапчевые методы защиты вы знаете?
Tags:формызащита от ботовзащита от спамакапча
Hubs: Website development
Total votes 126: ↑117 and ↓9+108
Views52K

Popular right now