CAPTCHA для Вашего сайта

    Сегодня я расскажу о том, как можно быстро и легко прикрутить проверку CAPTCHA на Ваш сайт.


    Для тех, кто не в курсе, CAPTCHA это автоматизированный тест Тьюринга для различения компьютеров и людей. Подробнее о том, что такое CAPTCHA можно почитать на википедии.


    В данном примере я воспользовался бесплатным сервисом recaptcha.net. Вам придется пройти регистрацию, чтобы работать с ним, ибо понадобятся Public и Private ключи.



    Так работает reCAPTCHA API:


    Я возьму пример кода реализации reCAPTCHA написанном для ASP.NET, но можно найти его практически для всех языков здесь.

    Для того, чтобы начать работать:


    1. Надо скачать библиотеку reCAPTCHA.
    2. Добавить Recaptcha.dll в директорию /bin/ Вашего сайта.
    3. Вставить следующий reCAPTCHA control в страницу где Вы хотите реализовать проверку:


    <%@ Register TagPrefix=«recaptcha» Namespace=«Recaptcha» Assembly=«Recaptcha» %>

    <recaptcha:RecaptchaControl
     ID=«recaptcha»
     runat=«server»
     PublicKey=«1234567890»      
     PrivateKey=«0987654321» />



    * Где PublicKey иPrivateKey это ключи, которые Вы получили при регистрации.

    Все, что Вам осталось, это проверить property Page.IsValid в коде.

    Например, вот так:

    <%@ Page Language=«VB» %>
    <%@ Register TagPrefix=«recaptcha» Namespace=«Recaptcha» Assembly=«Recaptcha» %>
    <script runat=server>
     Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs)
      If Page.IsValid Then
       lblResult.Text = «You Got It!»
       lblResult.ForeColor = Drawing.Color.Green
      Else
       lblResult.Text = «Incorrect»
       lblResult.ForeColor = Drawing.Color.Red
      End If
     End Sub
    </script>
    <html>
    <body>
     <form runat=«server»>
      <asp:Label Visible=false ID=«lblResult» runat=«server» />
     
      <recaptcha:RecaptchaControl
       ID=«recaptcha»
       runat=«server»
       PublicKey=«1234567890»   
       PrivateKey=«0987654321»
       />
      <br />
      <asp:Button ID=«btnSubmit» runat=«server» Text=«Submit» OnClick=«btnSubmit_Click» />
     </form>
    </body>
    </html>
    * This source code was highlighted with Source Code Highlighter.


    И это все.
    P.S.
    Если Вы когда-то разрабатывали свой модуль Captcha, буду рад, если поделитесь своим вареантом реализации.

    * Оригинальная запись была опубликована в моем блоге.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 23

      0
      Спасибо! Сейчас будем пробовать
        0
        Маленький офтопик.
        На мой взгляд, reCaptcha сильно неудобоварима для русскоязычной аудитории.
        1) Не одно, а два слова.
        2) В 50% случаев опирается на знание английского, а не на знание латинских букв. Кто не верит, может посмотреть http://recaptcha.net/learnmore.html , что реально генерит это чудо, а не на красивый скриншот.

        А в чём принципиальная сложность создать собственную капчу, по крайней мере визуальную?
          +1
          Да сложности нет. ПРосто при использовании данного сервиса мы помогаем распознавать книги, а не только заставляем пользователя крутить головой и читать буковки:-)
            0
            Про это я знал, но так как в статье данный вопрос не рассматривался, то решил 3 пункт не писать, а звучал он примерно так:
            3) Нельзя жертвовать удобством своих пользователей во благо 3 стороны.
            0
            Не всегда проекты ориентированы только на русскоязычную аудиторию.
              0
              Если выдан неясный текст, есть специальная кнопка для обновления изображения. Также интерфейс можно локализовать на русский язык.
              0
              Возможно что-то путаю, но....

              В чём кайф? Для реализации какого-либо сервиса как правило
              * используется вставка html-кода (js/кода). Пример - счётчики на сайт.
              * используется сторонняя библиотека.

              А тут и то и другое, плюс ключи, шифрование... Нафига этот огород?
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  Я уже описал ниже пример более корректной реализации.
                  Такой вариант с межхостовыми http-запросами - это очень громоздкое решение.

                  Могу предположить что авторы накрутили этот запрос с целью получить feedback - насколько часто по капче проходит некорректных вводов, попыток взлома и т.д. Можно было бы это сделать опциональным.
                +1
                Если есть PHP, то http://captcha.ru/ мне кажется более удобной.
                  0
                  Уточнил... оно ещё для проверки запрос шлёт на сервер верификации. ИМХО такое вобще неуместно. Все нормальные сервисы сами инициируют запрос, ибо не на каждом хостинге можно инициировать даже http-запрос.

                  + Ну если уж влезли в криптографию - лучше использовать такой вариант.
                  recaptcha генерирует картинку и в отдельном hidden-поле отсылает зашифрованный исходный текст капчи. Ключ у application server имеется. В итоге валидность моно проверить без запроса к серверу валидации.
                    0
                    Блин, вообще бы от каптчи как нибудь отказаться, достала она уже!!!
                    • НЛО прилетело и опубликовало эту надпись здесь
                      +1
                      Позволю себе чуть-чуть помочь тем, кто не любит VB.

                      <%@ Page Language="C#" %>
                      <%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %>
                      <script runat=server>
                      public void btnSubmit_Click(object sender, EventArgs e)
                      {
                        if (Page.IsValid)
                        {
                         lblResult.Text = "You Got It!";
                         lblResult.ForeColor = Drawing.Color.Green;
                        }
                        else
                        {
                         lblResult.Text = "Incorrect";
                         lblResult.ForeColor = Drawing.Color.Red;
                        }
                      }
                      </script>
                      <html>
                      <body>
                      <form runat="server">
                       <asp:Label Visible=false ID="lblResult" runat="server" />

                       <recaptcha:RecaptchaControl
                        ID="recaptcha"
                        runat="server"
                        PublicKey="1234567890" 
                        PrivateKey="0987654321"
                        />
                       <br />
                       <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />
                      </form>
                      </body>
                      </html>


                      * This source code was highlighted with Source Code Highlighter.
                      • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          да нет, там и без js работает
                          • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          Впервые увидел рекапчу на Татулизаторе Егора Лаврова.
                          Раз пять обновил, чтобы понять оба слова. Вот одно отлично, а со вторым проблемы постоянно.
                            –1
                            Хотите избавиться от аудитории - поставьте РеКапчу. На flasher.ru прикрутили к поиску, создать запрос теперь практически нереально, приходиться искать через Гугл. Незнаю как и почему но во первых реально непонятно что там написано, во вторых даже когда тебе кажется что ты расшифровал, система посылает тебя говоря что ты сделал это неправильно.
                              +1
                              Побывал использовать recapthca, не понравилась по многим причинам.
                              В поисках альтернативы наткнулся на Auto-Input Protection (AIP) for ASP.Net.
                              Порадовало наличие исходных кодов библиотеки. Полностью настраиваемая, предназначена для WebForms. Что может быть лутше? Только своя собственная ...
                              Скачать можно по адресу codeplex.com/aip
                                0
                                Ребята, ну что же это такое. Когда мы перестанем лениться думать сами. Для php прекрасно Captcha реализовывается самостоятельно, для ASP.NET, думаю, тоже.
                                  0
                                  Полностью согласен. Реализовывается за пол часа макимум. К тому же предложенная схема будет только замедлять работу сайта и делать его зависимым от другой системы. Лияно я всегда против такого решения, учитывая время написания своей каптчи.
                                  0
                                  хм… а как использовать рекапчу с кастомными валидаторами и validationgroup? нашел несколько решений, но в кодбихайнде почему то значение рекапчи всегда null.

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое