CSRF 攻撃の防止

最終更新日: 2023-10-04
  • 作成対象:
  • User

CSRF 攻撃の仕組み

クロスサイトリクエストフォージェリ (CSRF) とは、有効なユーザーのブラウザーが、iFrame を介して悪意のあるリクエストを送信するために使用される、Web サイトの脆弱性です。 ブラウザーはドメイン単位で cookie を送信するので、ユーザーがアプリケーションにログインすると、ユーザーのデータに問題が生じる場合があります。

例えば、ブラウザーで管理コンソールにログインする場合を考えます。 リンクを含む電子メールメッセージが届きます。 リンクをクリックすると、ブラウザーに新しいタブが開きます。 開いたページには、認証済みのAEM forms セッションの cookie を使用してFormsサーバーに悪意のあるリクエストをおこなう、非表示の iFrame が含まれています。 User Management は有効な Cookie を受け取るので、リクエストを渡します。

リファラー:​リクエストの発信元のソースページのアドレス。例えば、site1.comの Web ページには、site2.comへのリンクが含まれています。 このリンクをクリックすると、site2.comにリクエストが投稿されます。 このリクエストのリファラーはsite1.comです。リクエストは、ソースがsite1.comのページからおこなわれるからです。

許可リストに加えるURI: URI は、リクエストされるForms Server 上のリソースを識別します(例: /adminui または/contentspace)。 一部のリソースでは、外部のサイトからリクエストがアプリケーションにアクセスすることができます。こうしたリソースは、許可リスト登録済み URI と見なされます。Formsサーバーは、許可リストに加えるされた URI からリファラーチェックを実行しません。

null リファラー: 新しいブラウザーウィンドウまたはタブを開き、アドレスを入力して Enter キーを押すと、リファラーが null になります。 リクエストはまったく新しく、親 Web ページからのリクエストではないので、リクエストのリファラーはありません。 Formsサーバーは、次の場所から null リファラーを受け取ることができます。

  • Acrobatから SOAP または REST エンドポイントでおこなわれたリクエスト
  • AEM forms SOAP または REST エンドポイントで HTTP リクエストを実行するデスクトップクライアント
  • 新しいブラウザーウィンドウが開き、任意のAEM forms web アプリケーションのログインページの URL が入力されたとき

SOAP および REST エンドポイントで null リファラーを許可します。 また、すべての URI ログインページ( /adminui、/contentspace など)で null リファラーを許可し、対応するマッピングされたリソースも許可します。 例えば、/contentspace にマッピングされたサーブレットは/contentspace/faces/jsp/login.jspです。これは null リファラー例外である必要があります。 この例外は、Web アプリケーションでGETのフィルタリングを有効にした場合にのみ必要です。 null リファラーを許可するかどうかをアプリケーションで指定できます。 AEM Forms の堅牢化とセキュリティの「クロスサイトリクエストフォージェリー攻撃からの保護」を参照してください。

許可されているリファラーの例外: 許可されるリファラー例外は、許可されたリファラーのリストのサブリストで、このリストからのリクエストはブロックされます。 許可されているリファラーの例外は、Web アプリケーションに固有のものです。許可されたリファラーのサブセットで特定の Web アプリケーションを呼び出すことを許可しない場合は、許可されたリファラーの例外を使用してリファラーをできまブロックリストに加えるす。 許可されるリファラーの例外は、アプリケーションの web.xml ファイルで指定します。 (ヘルプとチュートリアルページの AEM Forms の堅牢化とセキュリティの「クロスサイトリクエストフォージェリ―攻撃からの保護」を参照してください)。

許可されているリファラーの仕組み

AEM Formsはリファラーフィルタリングを提供し、CSRF 攻撃の防止に役立ちます。 リファラーフィルタリングの仕組みを次に示します。

  1. Formsサーバーは、呼び出しに使用される HTTP メソッドを確認します。

    • POSTの場合、Formsサーバーはリファラーヘッダーのチェックを実行します。
    • GETの場合、Formsサーバーはリファラーチェックをバイパスします。ただし、CSRF_CHECK_GETS が true に設定されている場合を除きます。この場合、リファラーヘッダーがチェックされます。 CSRF_CHECK_GETS は、アプリケーションの web.xml ファイル内に設定されます。(堅牢化とセキュリティガイドの「クロスサイトリクエストフォージェリー攻撃からの保護」を参照してください)。
  2. Formsサーバーは、要求された URI が許可リストに加えるされているかどうかを確認します。

    • URI が許可リスト登録済みの場合、サーバーはリクエストを渡します。
    • 要求された URI が許可リストに加えるされない場合、サーバーは要求のリファラーを取得します。
  3. リクエストにリファラーがある場合、サーバーは許可されているリファラーであるかどうかを確認します。 許可されている場合、サーバーはリファラーの例外を確認します。

    • 例外の場合、リクエストはブロックされます。
    • 例外でない場合、リクエストは渡されます。
  4. リクエストにリファラーがない場合、サーバーは null リファラーが許可されているかどうかを確認します。

    • null リファラーが許可されている場合、リクエストが渡されます。
    • null リファラーが許可されていない場合、サーバーは要求された URI が null リファラーの例外かどうかを確認し、それに応じて要求を処理します。

許可されるリファラーの設定

Configuration Manager を実行すると、デフォルトのホストと IP アドレス、またはFormsサーバーが「許可されているリファラー」リストに追加されます。 このリストは、管理コンソールで編集できます。

  1. 管理コンソールで、設定/User Management/設定/許可されているリファラー URL の設定をクリックします。許可されているリファラーリストがページの下部に表示されます。

  2. 許可されたリファラーを追加するには:

    • 「許可されているリファラー」ボックスにホスト名または IP アドレスを入力します。 一度に複数の許可されたリファラーを追加するには、各ホスト名または IP アドレスを新しい行に入力します。
    • 「 HTTP Port 」ボックスと「 HTTPS Ports 」ボックスで、HTTP と HTTPS のどちらか、または両方を許可するポートを指定します。 これらのボックスを空のままにした場合、デフォルトのポート(HTTP の場合はポート 80、HTTPS の場合はポート 443)が使用されます。 ボックスに 0(ゼロ)を入力した場合、そのサーバー上のすべてのポートが有効になります。特定のポート番号を入力して、そのポートのみを有効にすることもできます。
    • 「追加」をクリックします。
  3. 許可されているリファラーリストからエントリを削除するには、リストから項目を選択して、「削除」をクリックします。

    許可されているリファラーリストが空の場合、CSRF 機能は動作を停止し、システムのセキュリティが低下します。

  4. 「許可されているリファラー」リストを変更した後、AEM Forms Server を再起動します。

このページ