CSRF保護
XX-XSRF-トークン
- ##はじめに
- Laravel クロスサイト リクエスト フォージェリ (CSRF) 攻撃、つまり認証されたユーザーの ID に依存して不正なコマンドを実行する悪意のある攻撃からアプリケーションを簡単に保護できます。 Laravel は、アクティブなユーザーセッションごとに CSRF「トークン」を自動的に生成します。トークンは、認証されたユーザーがアプリケーションにリクエストを行っているユーザーであることを確認するために使用されます。
- アプリケーションで HTML フォームを定義するときは、CSRF 保護ミドルウェアがリクエストを検証できるように、フォームに非表示の CSRF タグ フィールドを含める必要があります。 @csrf Blade を使用できます。次のように、トークン フィールドを生成するディレクティブ:
<form method="POST" action="/profile"> @csrf ... </form>Web ミドルウェア グループに含まれています
VerifyCsrfToken ミドルウェアは、リクエスト内のトークンがセッション内トークンに保存されているトークンと一致するかどうかを自動的に検証します。マッチング。
CSRF トークンと JavaScriptJavaScript 駆動のアプリケーションを構築する場合、JavaScript HTTP関数ライブラリを各リクエストに自動的に添付すると便利です。 CSRFトークン上で。デフォルトでは、
resources/js/bootstrap.jsファイルは、Axios HTTP 関数ライブラリによって登録された
csrf-token メタ タグの値を使用します。このライブラリを使用しない場合は、アプリケーションのこの動作を手動で構成する必要があります。
CSRF ホワイトリスト
場合によっては、不要な CSRF で保護された URL のセットを設定したい場合があります。たとえば、Stripe を使用して支払いを処理し、その Webhook システムを使用している場合、Stripe はルートに CSRF トークンを送信しないため、Stripe Webhook ハンドラー ルートを CSRF 保護から除外する必要があります。
典型的なアプローチでは、RouteServiceProvider
の web
ミドルウェアが適しているため、このタイプのルートを routes/web.php
の外側に置くことができます。このファイル内のすべてのルート。ただし、次のように、そのような URL を VerifyCsrfToken
ミドルウェアの $Except
属性に追加することで、そのようなルートの CSRF 保護を除外することもできます。 {ヒント} テストを実行すると、CSRF ミドルウェアは自動的に無効になります。
ミドルウェアは、
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
csrf-token# に登録されます。 ## メタ ラベル内の値。このライブラリを使用しない場合は、アプリケーションのこの動作を手動で構成する必要があります。
X-XSRF-TOKENLaravel は現在の CSRF トークンを
XSRF- TOKENリクエスト ヘッダーを設定できます。
Angular や Axios などの一部の JavaScript フレームワークやライブラリでは、その値が自動的に X-XSRF-TOKEN
Head に入れられるため、この Cookie は主に利便性を目的として送信されます。 この記事は、
LearnKu.com