" です。"/> " です。">

ホームページ  >  記事  >  PHPフレームワーク  >  Laravelでのcsrf攻撃の解決策

Laravelでのcsrf攻撃の解決策

WBOY
WBOYオリジナル
2022-06-21 16:07:533506ブラウズ

解決策: 1. Laravel を使用して、ユーザー セッションごとに「CSRF トークン」を自動的に生成します。このトークンは、ログインしているユーザーとリクエストを開始したユーザーが同一人物であるかどうかを確認するために使用できます。そうでない場合、リクエストは失敗します。 2 、トークン値を取得するためのグローバル ヘルパー関数 "csrf_token" が提供されます。ビュー送信フォームにトークン コードを追加するだけです。構文は "<...value php="" echo>"。

Laravelでのcsrf攻撃の解決策

この記事の動作環境: Windows 10 システム、Laravel バージョン 9、Dell G3 コンピューター。

laravel における csrf 攻撃の解決策

CSRF は、Cross-site request forgery の英語の略語です;

Laravel フレームワークで CSRF 攻撃を回避することは非常に困難です。

1. Laravel はユーザー セッションごとに CSRF トークンを自動的に生成します。このトークンは、ログインしているユーザーとリクエスターが同一人物であるかどうかを確認するために使用できます。そうでない場合、リクエストは失敗します。 (原理は検証コードと同じです。)

2. Laravel はトークン値を取得するためのグローバル ヘルパー関数 csrf_token を提供しているため、次の HTML コードをビュー送信フォームに追加するだけで済みます。トークン:

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

Laravel で CSRF 攻撃を回避する方法

ケース: ケースを通じて csrf メカニズムの検証を実装する
1. 2 つのルートを作成します。 1 つは表示フォーム (get) 用、もう 1 つはリクエストの処理 (post) です

Route::get('test6','Home\TestController@test6');Route::post('test7','Home\TestController@test7');

2. 必要なメソッドを作成します

	 public function test6(){
        return view('home.test.test6');
     }
     public function test7()
     {
         return "请求提交成功";
     }

3. 必要な単純なフォームを作成します

Laravelでのcsrf攻撃の解決策

4. 提出の効果 (エラーページ)

Laravelでのcsrf攻撃の解決策

結論: 先ほどのケースを通して、laravel の csrf 検証メカニズムがデフォルトで有効になっていることがわかります。 。

5. エラー問題を解決する (csrf 検証に合格する方法)
解決策: csrf に必要なトークン値を取得し、それをリクエストで後続のメソッドに渡します


    用户名:
         {{csrf_field()}}     

簡略化csrf_token メソッドの : {{csrf_field()}}

特定の式:

Laravelでのcsrf攻撃の解決策

2 つの違い:
Csrf_token のみトークンの値を出力します。
Csrf_field は、入力された隠しフィールド全体を出力します。

後で使用する場合の選択方法: ほとんどの場合、状況に応じて選択できます。ただし、開発者に選択権がなく、csrf_token を使用しなければならない場合は、非同期フォーム送信メソッドが使用されます。

CSRF 検証から例外ルーティングを除外する

データを取得するためのサードパーティ API へのリクエストなど、すべてのリクエストが CSRF 攻撃を回避する必要があるわけではありません。
例外を設定するには、除外するリクエスト URL を VerifyCsrfToken (app/Http/Middleware/VerifyCsrfToken.php) ミドルウェアの $excel プロパティ配列に追加します。

構成を記述して例外を設定します。
シングルルート除外の記述方法

 'home.test.test6',

複数の要素は「,」で区切って配列の記述方法に従います。

'home.test.test6','home.test.test7'

すべてのルートを除外して csrf を使用する必要がある場合は、次のように記述できます:

'*'

[関連する推奨事項: laravel ビデオ チュートリアル ]

以上がLaravelでのcsrf攻撃の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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