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

Laravelでのcsrf攻撃の解決策

WBOY
リリース: 2022-06-21 16:07:53
オリジナル
3577 人が閲覧しました

解決策: 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(&#39;test6&#39;,&#39;Home\TestController@test6&#39;);Route::post(&#39;test7&#39;,&#39;Home\TestController@test7&#39;);
ログイン後にコピー

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

	 public function test6(){
        return view(&#39;home.test.test6&#39;);
     }
     public function test7()
     {
         return "请求提交成功";
     }
ログイン後にコピー

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

Laravelでのcsrf攻撃の解決策

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

Laravelでのcsrf攻撃の解決策

結論: 先ほどのケースを通して、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()}}

特定の式:

Laravelでのcsrf攻撃の解決策

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

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

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

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

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

 &#39;home.test.test6&#39;,
ログイン後にコピー

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

&#39;home.test.test6&#39;,&#39;home.test.test7&#39;
ログイン後にコピー

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

&#39;*&#39;
ログイン後にコピー

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

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート