Extending ASP.NET: reCAPTCHA
В продолжении серии "Extending ASP.NET" предлагаю поговорить о спаме и о том, как его останавливать.
Спам всегда вызывает негативные эмоции - для владельцев сайтов, которые должны постоянно держать руку на пульсе, но и для рядовых пользователей, комментарии которых теряются в лавине всевозможных предложений.
На данный момент есть много средств борьбы со спамом, но не все одинаково эффективны. В статье рассмотрим reCAPTCHA - на мой взгляд, самое эффективное решение для борьбы со спамом.
reCAPTCHA
Сам элемент выглядит таким образом:
Как работает reCAPTCHA
Алгоритм работы элемента управления следующий:
- Пользователь загружает веб-страницу, на которой установлен элемент управления reCAPTCHA.
- Браузер пользователя делает запрос на экземпляр reCAPTCHA, пользователь получает token, связанный с запросом.
- Пользователь заполняет форму, вводит значение reCAPTCHA и отправляет на сервер данные, в том числе полученный token.
- reCAPTCHA проверяет ответ пользователя и посылает свой ответ.
- Если все верно, пользователь получает доступ к запрашиваемому ресурсу, в противном случае ему предлагают ввести ответ еще раз.
Схема работы изображена на рисунке:
Установка reCAPTCHA на сайт
Алгоритм установки элемента управления на сайт следующий:
1. Устанавливаем последнюю версию элемента управления. Загрузить его можно по ссылке.
2. Добавляем библиотеку Recaptcha.dll в ASP.NET проект.
3. Регистрируем элемент управления на странице:
<%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %><br />
4. Внутри
Для того, чтобы использовать элемент управления reCAPTCHA на своем сайте, необходимо зарегистрироваться на сайте recaptcha.net и получить специальный код.
Проверка reCAPTCHA
На сервер посылается запрос с такими данными:
URL | http://api-verify.recaptcha.net/verify | |
Параметры (посылаются с помощью протокола POST) | ||
privatekey (required) | Ваш приватный ключ (private key) | |
remoteip (required) | IP адрес сайта, с которого посылается запрос | |
challenge (required) | Значение "recaptcha_challenge_field" | |
response (required) | Значение "recaptcha_response_field" | |
Ответ | Ответ сервера, который состоит из набора строк, разделенных символом новой строки "\n" | |
Строка 1 | "true" или "false". "True" если каптча была введена правильно | |
Строка 2 | Если первая строка содержит "false", то эта строка будет содержать код ошибки.
reCAPTCHA
может отображать пользователю ошибку (через параметр error
- api.recaptcha.net/challenge).
Реализация не должна быть завязанной на код ошибки, так как в будущем они могут измениться. Пример: если ваш ответ имеет вид:
то вы можете добавить '&error=incorrect-captcha-sol' в запрос и пользователь увидит код ошибки. |
Таблица кодов ошибки
В таблице перечислены все коды ошибок, которые используются в reCAPTCHA.
unknown | Неизвестная ошибка. |
invalid-site-public-key | Открытый ключ не найден. |
invalid-site-private-key | Закрытый ключ не найден. |
invalid-request-cookie | Параметр "challenge" был неправильным. |
incorrect-captcha-sol | Введенный пользователем ответ неверный. |
verify-params-incorrect | Проверочные параметры не верные, нужно проверить, все ли параметры были отосланы. |
invalid-referrer | Ключи reCAPTCHA API были заблокированы по причинам безопасности. |
recaptcha-not-reachable | reCAPTCHA никогда не вернет этот код. Плагин должен возвращать этот код в том случае, если центр проверки reCAPTCHA недоступен. |
Дополнительные ссылки: