Контроль активности с Google reCAPTCHA

от автора

1С-Битрикс единственная система в которой есть модуль проактивной защиты. Он включает в себя:

  1. Проактивный фильтр (Web Application Firewall*) обеспечивает защиту от большинства известных атак на веб-приложения.
  2. Веб-антивирус — система противодействия заражениям сайтов.
  3. Двухэтапная авторизация.
  4. Контроль целостности файлов.
  5. Защита административной части с доступом к ней только с определенных IP адресов.
  6. Защита сессий.
  7. Защита редиректов от фишинга.
  8. Защита от фреймов.
  9. Контроль активности.

И сегодня хотел остановиться на одном методе защиты: Контроль активности.

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

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

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

Чтобы этого не случилось мы в своих проектах использовали технологию Google reCAPTCHA для проверки и отключения блокировки у пользователей сайта.

На текущий момент Google reCAPTCHA имеет весьма дружелюбный для пользователя интерфейс. Она не просит Вас распознать какой-то текст, или цифру. Это крайне не удобно и возможна куча ошибок. Минимум, что Google reCAPTCHA может попросить от Вас это поставить галочку, что Вы не робот:

Или предложит Вам выбрать картинки с изображением например апельсина.

Легко и удобно. Но как же данный функционал включить в свой проект? Так-же легко.

(Предположим у Вас уже есть акаунт на Google, если нет то идет регистрировать)
Авторизуемся на сайте www.google.com после чего идем по ссылке: www.google.com/recaptcha/admin

Нам предлагают зарегистрировать наш сайт в системе reCAPTCHA. Процесс регистрации довольно прост:

  1. Указываем название вашего сайта
  2. Указываем домены для которых будет использоваться reCAPTCHA. (По одному домену на одну строку)
  3. Указываем владельца. (Тут указываем Вашу учетную запись на GMail например: habrhabr@gmail.com)

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

Ключи мы получили идет теперь на наш сайт.

Корректировка страницы блокировки.

В системе 1С-Битрикс в папке /bitrix/ есть файл activity_limit.php в котором и лежит шаблон страницы отображаемой при блокировке пользователя. Вы можете включить в нее свой дизайн сайта, или сформировать новый шаблон именно для страницы блокировки. (этап подготовки интерфейса мы пропустим т.к. у каждого будет свой подход к тому как оформить эту страницу)

После того как мы подготовили основной интерфейс страницы займемся подключением модуля Google reCAPTCHA для этого в тело HTML документа до тэга нам надо вставить JS скрипты Google

<script src='https://www.google.com/recaptcha/api.js?hl=ru'></script>

В тело документа мы добавляем форму проверки и указываем в ней наш публичный ключ для формирования Google reCAPTCHA:

<form action="" method="post">         <div class="g-recaptcha" data-sitekey="Публличный_ключ"></div>         <br/>         <input type="submit" class="btn btn-system" value="Подтвердить"> </form>

Action у формы мы специально оставили пустым чтобы отправка выполнилась в этот-же файл.

Метод проверки и разблокировки.

<? if (isset($_REQUEST["g-recaptcha-response"])) //Если мы получили хеш проверки с формы {     require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); //Подключаем ядро Битрикса     $request = new \Bitrix\Main\Web\HttpClient(); //Создает объект HttpClient      //Формируем запрос на проверку в Google     $post = $request->post("https://www.google.com/recaptcha/api/siteverify", Array(         "secret" => "Секретный_ключ", //Наш секретный ключ от Google         "response" => $_REQUEST["g-recaptcha-response"], //Сам хеш с формы         "remoteip" => $_SERVER["REMOTE_ADDR"] //IP адрес пользователя проходящего проверку     ));     $post = json_decode($post); //Декодируем ответ от Google     if ($post->success == 'true') //Если проверка прошла удачно     {         $_SESSION["SESS_GRABBER_STOP_TIME"] = ""; //Очищаем ключ блокировки в сессии     }else{         //Выполняем действие если не прошел проверку на reCAPTCHA     } } ?>

И можно в HTML теле файла сделать тоже сообщение об удачном прохождении проверки:

 <?eif ($post->success == 'true'){?>     <h2>Поздравляем, Вы не робот.</h2>     <a  class="btn btn-system" href="<?=$APPLICATION->GetCurPageParam("", array("g-recaptcha-response"))?>">Обновить страницу</a>     <script type="text/javascript">         document.addEventListener('DOMContentLoaded', function() {             window.location.replace('<?=$APPLICATION->GetCurPageParam("", array("g-recaptcha-response"))?>');             window.location.reload();         });     </script> <?}?> 

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

Но вне зависимости от того прошел пользователь проверку или нет Вы получите отчет о том, что к нему были применены меры по блокировке его сессии. Предоставят возможность проанализировать самому последние его хиты в момент блокировки и у Вас будет возможность при необходимости занести его IP адрес в лист блокировки.

Надеюсь моя форма поможет Вам сократить число «роботов» на Ваших сайтах.

P.S. Не бойтесь, что поисковые системы попадут под блокировку. Для них есть в системе специальные методы по которым хиты поисковых системы не будут учитываться и индексация Вашего сайта не пострадает.

ссылка на оригинал статьи http://habrahabr.ru/post/267689/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *