Google reCAPTCHAによるアクティビティ制御

1C-Bitrixは、プロアクティブな防御モジュールがある唯一のシステムです。 以下が含まれます。
  1. プロアクティブフィルター(Webアプリケーションファイアウォール*)は、Webアプリケーションに対するほとんどの既知の攻撃に対する保護を提供します。
  2. Webウイルス対策は、 Webサイトの感染に対処するためのシステムです。
  3. 2段階認証
  4. ファイル整合性制御
  5. 特定のIPアドレスからのみアクセスできる管理部分の保護
  6. セッション保護。
  7. フィッシングからのリダイレクトの保護。
  8. フレームに対する保護。
  9. アクティビティ制御。


そして今日、私は保護の1つの方法、すなわち活動の監視に専念したかったのです。

アクティビティ制御を使用すると、過度にアクティブなユーザー、ソフトウェアロボット、一部のカテゴリのDDoS攻撃に対する保護を設定したり、ブルートフォースによるパスワード選択の試みを遮断したりできます。


この保護方法を有効にすると、ユーザーセッションがブロックされるパラメーターを指定し、そのセッションに関するレコードをログに記録します。 たとえば、ユーザーが10秒で30ヒットすると、セッションはブロックされ、そのレポートはサイト管理者に送信され、サイトのコンテンツの代わりに、アクセスが拒否されたことを示すメッセージとともにエラー503が表示されます。

しかし、この保護方法を有効にすると、ブロックが「ロボット」ではなく、人々によって行われる可能性があります。 標準バージョンでは、このロックを自分で解除してサイトのコンテンツを閲覧し続けることはできません。そのため、失望したユーザーを失い、サイトを離れるだけです。

これを防ぐため、プロジェクトでGoogle reCAPTCHAテクノロジーを使用して、サイトユーザーによるブロックをチェックして無効にしました。

現在、Google reCAPTCHAには非常に使いやすいインターフェイスがあります。 彼女は、テキストや数字を認識するように頼みません。 これは非常に不便であり、多くのエラーが発生する可能性があります。 Google reCAPTCHAがこれを確認するように求める場合、最低限はあなたがロボットではないということです。



または、たとえばオレンジの画像を使用して写真を選択するよう提案します。



簡単で便利。 しかし、この機能をプロジェクトにどのように含めることができますか? とても簡単です。

(既にGoogleにアカウントを持っていると仮定し、そうでない場合は登録に進みます)
www.google.comにログインして 、リンクをたどってください: www.google.com/recaptcha/admin

reCAPTCHAシステムにサイトを登録するよう提案されています。 登録プロセスは非常に簡単です。
  1. サイトの名前を示します
  2. reCAPTCHAが使用されるドメインを指定します。 (1行に1つのドメイン)
  3. 所有者を示します。 (ここでは、Gmailアカウントを例として示します:habrhabr@gmail.com)


登録後、2つのキーが生成されます。 1つのキーはサイトにreCAPTCHAを表示するために使用され、2番目のキーはユーザーがテストに合格したかどうかを確認するために使用されます。

受け取ったキーは、現在サイトにあります。

ページ調整をロックします。

1C-Bitrixシステムの/ bitrix /フォルダーには、ユーザーがブロックされたときに表示されるページテンプレートがあるactivity_limit.phpファイルがあります。 ウェブサイトのデザインをそこに含めるか、ロックページ専用の新しいテンプレートを作成できます。 (このページの設計方法は誰もが独自のアプローチを持っているため、インターフェースの準備段階はスキップします)

ページのメインインターフェースを準備したら、タグの前にHTMLドキュメントの本文でこのためのGoogle reCAPTCHAモジュールを接続します。GoogleJSスクリプトを挿入する必要があります

<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> 


フォーム上のアクションを意図的に空のままにして、同じファイルに送信しました。

検証およびロック解除方法。

 <? 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アドレスをブロックリストに追加する機会があります。

私のフォームがあなたのサイトの「ロボット」の数を減らすのに役立つことを願っています。

PS検索エンジンがブロックされることを恐れないでください。 彼らのために、システムには検索エンジンのヒットが考慮されず、サイトのインデックス作成が影響を受けない特別な方法があります。

Source: https://habr.com/ru/post/J267689/


All Articles