最新の Web アプリケーションでは、クロスサイト リクエスト フォージェリ (CSRF) 攻撃が一般的な攻撃方法になっています。Laravel は、CSRF 保護メカニズムが組み込まれた人気のある PHP フレームワークです。ミドルウェアを使用すると、アプリケーションに CSRF 保護を簡単に追加できます。
この記事では、Laravel で CSRF 保護のためのミドルウェアを使用する方法を紹介し、具体的なコード例を示します。
クロスサイト リクエスト フォージェリ攻撃、英語名は Cross-Site Request Forgery、CSRF と呼ばれ、ユーザー ID を偽造して悪意のあるリクエストを開始する攻撃方法です。
攻撃者は通常、ユーザーをだまして悪意のあるリンクのあるページをクリックさせたり、被害者がログインした Web サイトに悪意のあるスクリプトを挿入したりすることで CSRF 攻撃を実行します。被害者がログインすると、攻撃者は一連の悪意のあるリクエスト (パスワードの変更、メッセージの投稿など) を開始します。これらのリクエストは被害者にとって正当であるように見えますが、実際には、これらのリクエストは攻撃者によって開始されます。被害者に一定の損害を与えることになります。
Laravel は、CSRF 攻撃からアプリケーションを保護するための非常に便利なメカニズムを提供します。 Laravel フレームワークには CSRF 保護メカニズムが組み込まれており、ミドルウェアを通じて実装できます。
Laravel では、CSRF ミドルウェアを使用して、POST、PUT、DELETE リクエストの CSRF トークンが有効かどうかを確認します。デフォルトでは、Laravel は VerifyCsrfToken
ミドルウェアをアプリケーションに追加し、これらのリクエストの CSRF トークンが有効かどうかを自動的にチェックします。
CSRFトークンが無効な場合、LaravelはTokenMismatchException
例外をスローし、デフォルトのエラービューを提供します。独自のニーズに応じてエラー処理をカスタマイズすることもできます。
Laravel は、各ユーザー セッションでアプリケーションの CSRF トークンを生成します。設定ファイル config/csrf.php
でアプリケーションを設定できます。 CSRFトークンの構成。この構成ファイルを使用すると、リクエスト内の CSRF COOKIE と CSRF トークンの名前を構成できます。
<?php return [ /* |-------------------------------------------------------------------------- | CSRF Cookie Name |-------------------------------------------------------------------------- | | The name of the cookie used to store the CSRF token. | */ 'cookie' => 'XSRF-TOKEN', /* |-------------------------------------------------------------------------- | CSRF Header Name |-------------------------------------------------------------------------- | | The name of the CSRF header used to store the CSRF token. | */ 'header' => 'X-XSRF-TOKEN', /* |-------------------------------------------------------------------------- | CSRF Token Expiration |-------------------------------------------------------------------------- | | The number of minutes that the CSRF token should be considered valid. | */ 'expire' => 60, ];
VerifyCsrfToken
Laravel のミドルウェアは、ルートで定義された POST、PUT、または DELETE リクエストで CSRF トークンが有効かどうかを確認します。デフォルトでは、アプリケーションの routes/web.php
ファイルは、web
ミドルウェアに加えて、VerifyCsrfToken
ミドルウェアも使用します。
アプリケーション内の他のルートで使用するために、CSRF ミドルウェアをミドルウェア グループに追加できます。ミドルウェアでルートを保護するには、次のように middleware
メソッドを使用してルート定義にルートを追加します。
Route::middleware(['web', 'csrf'])->group(function () { // });
デフォルトの場合VerifyCsrfToken
ミドルウェアを使用して不正な CSRF トークンが検出された場合、Laravel は TokenMismatchException
例外をスローし、デフォルトのエラー ビューを提供します。
CSRF 例外をキャッチして、独自のエラー処理メソッドを app/Exceptions/Handler.php
ファイルで指定することができます。カスタム CSRF 例外ハンドラーの例を次に示します。
<?php namespace AppExceptions; use Exception; use IlluminateFoundationExceptionsHandler as ExceptionHandler; use IlluminateSessionTokenMismatchException; class Handler extends ExceptionHandler { /** * A list of the exception types that should be reported. * * @var array */ protected $dontReport = [ TokenMismatchException::class, ]; /** * Report or log an exception. * * @param Exception $exception * @return void * * @throws Exception */ public function report(Exception $exception) { parent::report($exception); } /** * Render an exception into an HTTP response. * * @param IlluminateHttpRequest $request * @param Exception $exception * @return IlluminateHttpResponse * * @throws Exception */ public function render($request, Exception $exception) { if ($exception instanceof TokenMismatchException) { // 处理CSRF异常 return redirect() ->back() ->withInput($request->input()) ->with('error', 'CSRF Token Mismatch'); } return parent::render($request, $exception); } }
上記のコードでは、TokenMismatchException
例外をキャッチし、with
メソッドを使用してエラー メッセージを渡します。 error
フラッシュ データに保存します。後で、with
メソッドを使用してビュー内のこのフラッシュ データにアクセスできます。
最後に、POST、PUT、または DELETE リクエストの送信が必要なフォームのビューに CSRF トークン フィールドを追加できます。 CSRF トークン フィールドは、以下に示すように、csrf_field
メソッドを使用してフォームで生成できます。
<form method="POST" action="/example"> {{ csrf_field() }} <!-- Your form fields go here... --> <button type="submit">Submit</button> </form>
この記事では、CSRF トークン フィールドの使用方法を紹介しました。 Laravel ミドルウェアは、CSRF 攻撃からアプリケーションを保護します。デフォルトの VerifyCsrfToken
ミドルウェアを使用して CSRF トークンを構成し、CSRF エラー処理方法をカスタマイズすることで、アプリケーションのセキュリティを効果的に改善しました。これらのテクノロジーは、より安全な Web アプリケーションの構築に役立つと信じています。
以上がLaravel でクロスサイト リクエスト フォージェリ (CSRF) 保護のためのミドルウェアを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。