ホームページ  >  記事  >  PHPフレームワーク  >  Laravel でクロスサイト リクエスト フォージェリ (CSRF) 保護のためのミドルウェアを使用する方法

Laravel でクロスサイト リクエスト フォージェリ (CSRF) 保護のためのミドルウェアを使用する方法

PHPz
PHPzオリジナル
2023-11-02 11:16:47630ブラウズ

Laravel でクロスサイト リクエスト フォージェリ (CSRF) 保護のためのミドルウェアを使用する方法

最新の Web アプリケーションでは、クロスサイト リクエスト フォージェリ (CSRF) 攻撃が一般的な攻撃方法になっています。Laravel は、CSRF 保護メカニズムが組み込まれた人気のある PHP フレームワークです。ミドルウェアを使用すると、アプリケーションに CSRF 保護を簡単に追加できます。

この記事では、Laravel で CSRF 保護のためのミドルウェアを使用する方法を紹介し、具体的なコード例を示します。

クロスサイト リクエスト フォージェリ (CSRF) 攻撃とは何ですか?

クロスサイト リクエスト フォージェリ攻撃、英語名は Cross-Site Request Forgery、CSRF と呼ばれ、ユーザー ID を偽造して悪意のあるリクエストを開始する攻撃方法です。

攻撃者は通常、ユーザーをだまして悪意のあるリンクのあるページをクリックさせたり、被害者がログインした Web サイトに悪意のあるスクリプトを挿入したりすることで CSRF 攻撃を実行します。被害者がログインすると、攻撃者は一連の悪意のあるリクエスト (パスワードの変更、メッセージの投稿など) を開始します。これらのリクエストは被害者にとって正当であるように見えますが、実際には、これらのリクエストは攻撃者によって開始されます。被害者に一定の損害を与えることになります。

Laravel で CSRF 保護用のミドルウェアを使用するにはどうすればよいですか?

Laravel は、CSRF 攻撃からアプリケーションを保護するための非常に便利なメカニズムを提供します。 Laravel フレームワークには CSRF 保護メカニズムが組み込まれており、ミドルウェアを通じて実装できます。

Laravel では、CSRF ミドルウェアを使用して、POST、PUT、DELETE リクエストの CSRF トークンが有効かどうかを確認します。デフォルトでは、Laravel は VerifyCsrfToken ミドルウェアをアプリケーションに追加し、これらのリクエストの CSRF トークンが有効かどうかを自動的にチェックします。

CSRFトークンが無効な場合、LaravelはTokenMismatchException例外をスローし、デフォルトのエラービューを提供します。独自のニーズに応じてエラー処理をカスタマイズすることもできます。

CSRF トークンの設定

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,

];

CSRF ミドルウェアの使用

VerifyCsrfTokenLaravel のミドルウェアは、ルートで定義された POST、PUT、または DELETE リクエストで CSRF トークンが有効かどうかを確認します。デフォルトでは、アプリケーションの routes/web.php ファイルは、web ミドルウェアに加えて、VerifyCsrfToken ミドルウェアも使用します。

アプリケーション内の他のルートで使用するために、CSRF ミドルウェアをミドルウェア グループに追加できます。ミドルウェアでルートを保護するには、次のように middleware メソッドを使用してルート定義にルートを追加します。

Route::middleware(['web', 'csrf'])->group(function () {
    //
});

カスタム CSRF エラー処理

デフォルトの場合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>

summary

この記事では、CSRF トークン フィールドの使用方法を紹介しました。 Laravel ミドルウェアは、CSRF 攻撃からアプリケーションを保護します。デフォルトの VerifyCsrfToken ミドルウェアを使用して CSRF トークンを構成し、CSRF エラー処理方法をカスタマイズすることで、アプリケーションのセキュリティを効果的に改善しました。これらのテクノロジーは、より安全な Web アプリケーションの構築に役立つと信じています。

以上がLaravel でクロスサイト リクエスト フォージェリ (CSRF) 保護のためのミドルウェアを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。