解決策: 1. Laravel を使用して、ユーザー セッションごとに「CSRF トークン」を自動的に生成します。このトークンは、ログインしているユーザーとリクエストを開始したユーザーが同一人物であるかどうかを確認するために使用できます。そうでない場合、リクエストは失敗します。 2 、トークン値を取得するためのグローバル ヘルパー関数 "csrf_token" が提供されます。ビュー送信フォームにトークン コードを追加するだけです。構文は "<...value php="" echo>"。
この記事の動作環境: Windows 10 システム、Laravel バージョン 9、Dell G3 コンピューター。
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(); ?>">
ケース: ケースを通じて 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. 必要な単純なフォームを作成します
4. 提出の効果 (エラーページ)
結論: 先ほどのケースを通して、laravel の csrf 検証メカニズムがデフォルトで有効になっていることがわかります。 。
5. エラー問題を解決する (csrf 検証に合格する方法)
解決策: csrf に必要なトークン値を取得し、それをリクエストで後続のメソッドに渡します
<form action="/home/test/test7" method="post"> 用户名:<input type="text" name="username"><br> <input type="hidden" name="_token" value="{{csrf_token()}}"> {{csrf_field()}} <input type="submit" value="提交"></form>
簡略化csrf_token メソッドの : {{csrf_field()}}
特定の式:
2 つの違い:
Csrf_token のみトークンの値を出力します。
Csrf_field は、入力された隠しフィールド全体を出力します。
後で使用する場合の選択方法: ほとんどの場合、状況に応じて選択できます。ただし、開発者に選択権がなく、csrf_token を使用しなければならない場合は、非同期フォーム送信メソッドが使用されます。
データを取得するためのサードパーティ 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 サイトの他の関連記事を参照してください。