Extending ASP.NET: reCAPTCHA

суббота, 12 июня 2010, Александр Краковецкий

В продолжении серии "Extending ASP.NET" предлагаю поговорить о спаме и о том, как его останавливать.

Спам всегда вызывает негативные эмоции - для владельцев сайтов, которые должны постоянно держать руку на пульсе, но и для рядовых пользователей, комментарии которых теряются в лавине всевозможных предложений.

На данный момент есть много средств борьбы со спамом, но не все одинаково эффективны. В статье рассмотрим reCAPTCHA - на мой взгляд, самое эффективное решение для борьбы со спамом.

reCAPTCHA

Сам элемент выглядит таким образом:

See a live demo of reCAPTCHA

Как работает reCAPTCHA

Алгоритм работы элемента управления следующий:

  1. Пользователь загружает веб-страницу, на которой установлен элемент управления reCAPTCHA.
  2. Браузер пользователя делает запрос на экземпляр reCAPTCHA, пользователь получает token, связанный с запросом.
  3. Пользователь заполняет форму, вводит значение reCAPTCHA и отправляет на сервер данные, в том числе полученный token.
  4. reCAPTCHA проверяет ответ пользователя и посылает свой ответ.
  5. Если все верно, пользователь получает доступ к запрашиваемому ресурсу, в противном случае ему предлагают ввести ответ еще раз.

Схема работы изображена на рисунке:

Установка reCAPTCHA на сайт

Алгоритм установки элемента управления на сайт следующий:

1. Устанавливаем последнюю версию элемента управления. Загрузить его можно по ссылке.

2. Добавляем библиотеку Recaptcha.dll в ASP.NET проект.

3. Регистрируем элемент управления на странице:

<%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %><br />

4. Внутри

вставляем элемент управления в необходимом месте:

<recaptcha:RecaptchaControl<br />  ID="recaptcha"<br />  runat="server"<br />  PublicKey=""            <br />  PrivateKey=""<br />  /><br />

В свойствах PubliсKey и PrivateKey пишем полученные на сайте ключи.

5. Удостоверьтесь, что в коде вы используете свойство Page.IsValid для проверки валидности запроса.

Пример кода:

<%@ Page Language="VB" %>
<%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %><br />





ID="recaptcha"
runat="server"
PublicKey=""
PrivateKey=""
/>






Для того, чтобы использовать элемент управления 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). Реализация не должна быть завязанной на код ошибки, так как в будущем они могут измениться.

Пример: если ваш ответ имеет вид:

false
incorrect-captcha-sol

то вы можете добавить '&error=incorrect-captcha-sol' в запрос и пользователь увидит код ошибки.

Таблица кодов ошибки

В таблице перечислены все коды ошибок, которые используются в reCAPTCHA.

unknown Неизвестная ошибка.
invalid-site-public-key Открытый ключ не найден.
invalid-site-private-key Закрытый ключ не найден.
Параметр "challenge" был неправильным.
incorrect-captcha-sol Введенный пользователем ответ неверный.
verify-params-incorrect Проверочные параметры не верные, нужно проверить, все ли параметры были отосланы.
invalid-referrer Ключи reCAPTCHA API были заблокированы по причинам безопасности.
recaptcha-not-reachable reCAPTCHA никогда не вернет этот код. Плагин должен возвращать этот код в том случае, если центр проверки reCAPTCHA недоступен.

Дополнительные ссылки:


Ищите нас в интернетах!

Комментарии

Свежие вакансии