Pull to refresh

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

Reading time 4 min
Views 11K
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 теле файла сделать тоже сообщение об удачном прохождении проверки:


<?if ($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. Не бойтесь, что поисковые системы попадут под блокировку. Для них есть в системе специальные методы по которым хиты поисковых системы не будут учитываться и индексация Вашего сайта не пострадает.
Tags:
Hubs:
-3
Comments 9
Comments Comments 9

Articles