2017-02-21 2 views
2

私はかなり新しいPHPLaravelです。私は{{csrf_field()}}という表記を<form>に挿入しています。私は次の形式を持っているビューになぜ{{csrf_field()}}をフォームの最後に置いても(Laravel 5ビューで)、私はTokenMismatchExceptionを取得しますか?

:私は{{csrf_field()}}を置くのであれば

public function store(Request $request) 
{ 
    return $request->all(); 
} 

:このminimialisticコントローラメソッドによって処理され

<form method="post" action="/registration"> 
 

 
    <div class="form-group"> 
 
    <label>Nome</label> 
 
    <div class="input-group"> 
 
     <div class="input-group-addon"><i class="fa fa-user"></i></div> 
 
     <input type="text" name="name" class="form-control" placeholder="Inserisci il tuo nome"> 
 
    </div> 
 
    </div> 
 

 
    <div class="form-group"> 
 
    <label>Cognome</label> 
 
    <div class="input-group"> 
 
     <div class="input-group-addon"><i class="fa fa-user"></i></div> 
 
     <input type="text" name="surname" class="form-control" placeholder="Inserisci il tuo cognome"> 
 
    </div> 
 
    </div> 
 

 
    <!-- Some other fields --> 
 

 
    {{csrf_field()}} 
 

 
    <button type="submit" class="btn btn-default">Submit</button> 
 

 
</form>

送信ボタンの前に "statment"がうまくいきました。彼はコントローラメソッドによって正しく処理されていますが、この行を削除しても機能しない場合、TokenMismatchExceptionを取得します。

なぜそれが正確で、これを正確に表しているのですか{{csrf_field()}}なぜ私はフォームで使用しますか?

+0

リクエストメソッドでは、csrfトークンを検索します。 –

答えて

2

CSRFはクロスサイトリクエスト偽造の略です。

この場合、Laravelはこのフィールドにリクエストを送信する必要があり、リクエストがポストバック時に偽造されていないことを確認できます。

良い説明はここで見つけることができます:https://stackoverflow.com/a/33829607/1068537

4

Laravelを使用すると、クロスサイトリクエストフォージェリ(CSRF)攻撃からアプリケーションを簡単に保護できます。クロスサイトリクエスト偽造は、認証されたユーザーの代わりに不正なコマンドが実行される悪意のある攻撃の一種です。 Laravelは、アプリケーションによって管理されているアクティブな各ユーザーセッションに対してCSRF "トークン"を自動的に生成します。このトークンは、認証されたユーザーが実際にアプリケーションに要求を出すものであることを確認するために使用されます。 アプリケーションでHTMLフォームを定義する場合は、フォームに隠れたCSRFトークンフィールドを含めて、CSRF保護ミドルウェアが要求を検証できるようにする必要があります。

詳細については、CSRF Protection documentationを参照してください。

+0

[OK]を、私の唯一の疑いは、私は認証されたユーザーではないです。それは公開ページです。どのように正確に動作しますか? –

1

短い答えはまた、ワンクリックで攻撃として知られている、クロスサイトリクエストフォージェリ

クロスサイトリクエストフォージェリを防止するためですかセッション CSRFまたは XSRFは、許可されていない コマンドがWebサイトが信頼するユーザから送信されるWebサイトの悪意のある攻撃の一種です。[2] 特定のサイトに対してユーザーが の信頼を利用するクロスサイトスクリプティング(XSS)とは異なり、CSRFは、ユーザーのブラウザ にサイトが持つ信頼を利用します。平易な英語で

https://laravel.com/docs/5.4/csrf

よりは、送信フォームは、サーバーから生成されたことを確認するために使用され、それがユーザーのブラウザではなく、ロボットまたはプログラムの薬剤のいずれかの種類から適用されます。

Laravelのようなフレームワークを使用するかどうかに関わらず、CSRFを処理することは非常に重要です。

関連する問題