Инструкция по встраиванию Google Recaptcha.

 

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

Процесс внедрения Google reCaptcha на свой сайт состоит из следующих этапов:

  • Регистрация сайта на гугле
  • Внедрение скрипта для инициализации компонента на клиенте
  • Написание основного кода

Далее будут рассмотрены эти шаги более подробно.

 

Регистрация сайта в сервисе гугл

Для выполнения данной операции потребуется аккаунт гугл и следующая страница: https://www.google.com/recaptcha/admin#list

Данная страница состоит из двух частей: в первой части требуется ввести сайт и домены, во второй части – получить открытый и закрытый ключ.

На этом регистрация окончена

 

Внедрение скрипта для инициализации компонента на клиенте

В первую очередь требуется подключить сам компонент, указав тег script и такими аттрибутами:

@ViewBag.currLang - код языка
<script 
   src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=@ViewBag.currLang" 
   async 
   defer>
</script>

 

Здесь следует обратить внимание на параметр onload – это имя функции обратного вызова который следует написать далее:

<div id="login-captcha" class="buffer-bottom-2"></div>

<script>
	var onloadCallback = function () {
        grecaptcha.render(document.getElementById('login-captcha'), {
            'sitekey': '6LcDsBETAAAAAMIxBirzlswxqcoG9lMCoCgEm-MU' // replace your sitekey
        });
    };
</script>

Ключ который передается в параметре sitekey – открытый.

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

Написание основного кода

Основной код состоит из серверной и клиентской части. Далее будет показан пример реализации с помощью AJAX.

 $(function () {
     $('.b').click(function (e) {
           e.preventDefault();
           var resp = $('[name="g-recaptcha-response"]').val();
           var params = { name: "dddd", resp: resp }; 
           as.sys.ajaxSend("/Coupons/Test2", params, function (data) {
              if (typeof (data) != "object") data = eval('(' + data + ')');
              console.log(data);
              if (data.result) {
              } 
              else 
              {
                 as.sys.bootstrapAlert(data.msg || "Возникли ошибки при выполнении операции!", { type: 'danger' });
              }
           });
     });
 })

И, соответственно, серверная часть:

[HttpPost]
 public ActionResult Test2(string name, string resp)
 {
     var g = new GoogleRecaptcha("6LdGZRoTAAAAAGNdtZ2oi6joT1i78JiLDKYaVRry");
     var isValidCaptcha = g.VerifyResponse(resp, true);
     var res = false;
     if (isValidCaptcha)
     {
         res = true;
     }
     return Json(new {
       result = res
     });
 }

Клиентский код запрашивает значение из каптчи, отдает его на сервер, который расшифровывает полученные данные с помощью закрытого ключа, и, соответственно, валидирует.