Статьи

10 вещей, которые нужно проверить перед использованием CAPTCHA

Spam bot Все системы CAPTCHA обречены на провал . К сожалению, это не помешало нетерпеливым разработчикам использовать CAPTCHA даже в самых простых веб-формах для отправки по электронной почте.

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

Худшая проблема с CAPTCHA состоит в том, что они возлагают ответственность на пользователя. Пользователям все равно, получаете ли вы тысячи спам-сообщений или поддельных учетных записей: это ваша проблема. CAPTCHA должен быть последним барьером защиты, а не первым.

Подавляющее большинство попыток взлома и ботов можно предотвратить, не прибегая к CAPTCHA. Если вы сделаете это умеренно сложным, спаммеры просто перейдут к следующей более легкой цели. Вот некоторые основные методы, которые остановят большинство попыток подделки.

1. Проверьте все на стороне сервера

Вам необходимо проверять каждое поле, используя код на стороне сервера — даже если у вас есть строгая проверка на стороне клиента. Будьте особенно осторожны с полями, которые размещены в заголовках писем. Адреса электронной почты, вероятно, являются наиболее важными значениями для проверки: используйте правильное регулярное выражение и следите за тегами HTML, SQL-инъекциями или возвращаемыми символами (n и r в PHP).

2. Проверьте спамоподобный контент

Большинство спамеров публикуют ссылки на сайты. Если это не то, что вы ожидаете, это может указывать на спам-бота. Может помочь сторонний инструмент, такой как Akismet .

3. Проверьте мошеннические значения POST и GET

Если ваша форма ожидает три поля POST, наличие четвертого может указывать на попытку взлома. Точно так же проверьте, что дополнительные значения GET не были переданы.

4. Проверьте заголовок HTTP

Более простые спам-боты редко устанавливают пользовательский агент (HTTP_USER_AGENT) или ссылающуюся страницу (HTTP_REFERER). Вы, безусловно, должны убедиться, что реферер — это страница, на которой находится ваша форма.

5. Используйте поле приманки

Спам-боты обычно пытаются заполнить каждое поле формы, чтобы пройти базовую проверку. Поле honeypot — это поле, скрытое от пользователя (для CSS- display Поле должно быть помечено «Пожалуйста, оставьте это поле пустым» или аналогичным для учетных записей тех, у кого отключен CSS или используются пользовательские таблицы стилей.

6. Обнаружить наличие JavaScript

Если ваша страница может работать с JavaScript, вы можете быть почти уверены, что она была загружена в браузер пользователем. Простая динамически генерируемая функция JavaScript на странице может выполнять простые вычисления или создавать контрольную сумму для опубликованных данных. Это может быть передано обратно в форме значения для проверки.

По оценкам, 10% людей отключили JavaScript, поэтому в таких ситуациях потребуется дополнительная проверка.

7. Показать страницу подтверждения или потерпеть неудачу при первой попытке публикации

Боты испытывают затруднения, реагируя на ответ сервера. Если у вас есть какие-либо сомнения относительно действительности сообщения, покажите промежуточную страницу с просьбой подтвердить свои данные и нажмите «Отправить» еще раз.

8. Время отклика пользователя

Учет человеческого поведения — один из лучших способов обнаружить ботов. Пользователям потребуется немного времени, чтобы заполнить формы, тогда как боты почти мгновенные. Я использую следующий метод во многих формах, и он был эффективным:

  1. Текущее время сервера записывается при создании страницы формы.
  2. Значение времени кодируется в строку. Фактический алгоритм кодирования зависит от вас, но он должен быть не очевидным и позволять декодировать обратно к исходному значению. Я также рекомендовал бы использовать уникальные пользовательские данные, такие как IP-адрес, в качестве ключа шифрования.
  3. Кодированное время помещается в скрытое значение формы.
  4. Когда форма отправляется обратно, поле проверяется и декодируется обратно во времени. Теперь это можно сравнить с текущим временем сервера, чтобы убедиться, что время ответа находится в пределах определенного окна, например, от 20 секунд до 20 минут.

Этот процесс имеет несколько преимуществ: он не зависит от технологии на стороне клиента, значение времени должно быть в возвращаемых данных, и, даже если ваша форма подделана, он ограничивает количество поддельных отправлений, которые можно отправить.

9. Записывайте все

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

10. Обработка крайних случаев

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

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

CAPTCHA могут быть важны для сайтов, которые могут понести значительные денежные потери или являются очевидными целями для незаконных действий, таких как онлайн-банкинг и веб-почта. Тем не менее, они излишни для большинства форм: комбинация методов остановит большинство ботов без затруднений при регистрации для реальных пользователей.