为什么如果我不在表单的末尾放置{{csrf_field()}}(在Laravel 5视图中)我获得了TokenMismatchException?

2 php laravel laravel-5 laravel-5.3 laravel-5.4

我很新PHP,Laravel而且我对{{csrf_field()}}插入到符号中的符号有以下疑问<form>.

在视图中我有以下形式:

<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>
Run Code Online (Sandbox Code Playgroud)

这是由这种最小化的控制器方法处理的:

public function store(Request $request)
{
    return $request->all();
}
Run Code Online (Sandbox Code Playgroud)

因此,如果我{{csrf_field()}}在提交按钮之前放置"statment"它工作正常并且请求由控制器方法正确处理但是如果我删除此行它不能工作并且我获得了TokenMismatchException.

为什么会如此以及究竟代表什么{{csrf_field()}}以及为什么我要在表单中使用它?

347*_*948 5

Laravel可以轻松保护您的应用程序免受跨站点请求伪造(CSRF)攻击.跨站点请求伪造是一种恶意攻击,由此代表经过身份验证的用户执行未经授权的命令.Laravel为应用程序管理的每个活动用户会话自动生成CSRF"令牌".此令牌用于验证经过身份验证的用户是否是实际向应用程序发出请求的用户.无论何时在应用程序中定义HTML表单,都应在表单中包含隐藏的CSRF令牌字段,以便CSRF保护中间件可以验证请求.

有关更多信息,请参阅CSRF保护文档.


Phi*_*Elm 5

CSRF 代表跨站请求伪造

在这种情况下,Laravel 要求将此字段与请求一起发送,以便在回发时验证请求不是伪造的。

一个很好的解释可以在这里找到:https : //stackoverflow.com/a/33829607/1068537