CSRF保護


XX-XSRF-トークン

  • ##はじめに
  • Laravel クロスサイト リクエスト フォージェリ (CSRF) 攻撃、つまり認証されたユーザーの ID に依存して不正なコマンドを実行する悪意のある攻撃からアプリケーションを簡単に保護できます。 Laravel は、アクティブなユーザーセッションごとに CSRF「トークン」を自動的に生成します。トークンは、認証されたユーザーがアプリケーションにリクエストを行っているユーザーであることを確認するために使用されます。
  • アプリケーションで HTML フォームを定義するときは、CSRF 保護ミドルウェアがリクエストを検証できるように、フォームに非表示の CSRF タグ フィールドを含める必要があります。 @csrf Blade を使用できます。次のように、トークン フィールドを生成するディレクティブ:
  • <form method="POST" action="/profile">
        @csrf  
         ...
      </form>
Web ミドルウェア グループに含まれています

VerifyCsrfToken ミドルウェアは、リクエスト内のトークンがセッション内トークンに保存されているトークンと一致するかどうかを自動的に検証します。マッチング。

CSRF トークンと JavaScript

JavaScript 駆動のアプリケーションを構築する場合、JavaScript HTTP

関数ライブラリを各リクエストに自動的に添付すると便利です。 CSRFトークン上で。デフォルトでは、

resources/js/bootstrap.js

ファイルは、Axios HTTP 関数ライブラリによって登録された

csrf-token

メタ タグの値を使用します。このライブラリを使用しない場合は、アプリケーションのこの動作を手動で構成する必要があります。

CSRF ホワイトリスト

場合によっては、不要な CSRF で保護された URL のセットを設定したい場合があります。たとえば、Stripe を使用して支払いを処理し、その Webhook システムを使用している場合、Stripe はルートに CSRF トークンを送信しないため、Stripe Webhook ハンドラー ルートを CSRF 保護から除外する必要があります。

典型的なアプローチでは、RouteServiceProviderweb ミドルウェアが適しているため、このタイプのルートを routes/web.php の外側に置くことができます。このファイル内のすべてのルート。ただし、次のように、そのような URL を VerifyCsrfToken ミドルウェアの $Except 属性に追加することで、そのようなルートの CSRF 保護を除外することもできます。 {ヒント} テストを実行すると、CSRF ミドルウェアは自動的に無効になります。

X-CSRF-TOKEN

POST パラメータで CSRF トークンを確認することに加えて、
VerifyCsrfToken

ミドルウェアは、

X-CSRF-TOKEN

リクエスト ヘッダーもチェックします。次のように、トークンを HTML meta タグに保存する必要があります。

<?php
   namespace App\Http\Middleware;
   use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
   class VerifyCsrfToken extends Middleware{   
     /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */  
     protected $except = [    
         'stripe/*',        
         'http://example.com/foo/bar',        
         'http://example.com/foo/*',    
         ];
       }
次に、meta タグを作成したら、次のようなライブラリに指示できます。 jQuery すべてのリクエストのヘッダーにトークンを自動的に追加します。また、AJAX ベースのアプリケーションに対してシンプルで便利な CSRF 保護を提供することもできます。次のように:

<meta name="csrf-token" content="{{ csrf_token() }}">

{tip} デフォルトでは、resources/js/bootstrap.js

ファイルは Axios HTTP 関数ライブラリ
csrf-token# に登録されます。 ## メタ ラベル内の値。このライブラリを使用しない場合は、アプリケーションのこの動作を手動で構成する必要があります。

X-XSRF-TOKENLaravel は現在の CSRF トークンを

XSRF- TOKEN
cookie
。フレームワークによって生成されるすべての応答に含まれます。 Cookie 値を使用して #XX-XSRF-TOKEN

リクエスト ヘッダーを設定できます。

Angular や Axios などの一部の JavaScript フレームワークやライブラリでは、その値が自動的に X-XSRF-TOKEN Head に入れられるため、この Cookie は主に利便性を目的として送信されます。
この記事は、LearnKu.com

Web サイトで初めて公開されました。