【问题标题】:Laravel 5.6 CSRF token not validating / checkedLaravel 5.6 CSRF 令牌未验证/检查
【发布时间】:2018-11-09 17:44:50
【问题描述】:

我有:

刀片

<form class="form-horizontal was-validated" method="POST" action="{{ route('account.applications.index')}}">
  {{ csrf_field() }}
  {{-- yadda yadda yadda --}}
  <div class="form-group row">
    <label class="col-sm-2 col-form-label">&nbsp;</label>
    <div class="col-sm-10">
      <input id="application_type" type="hidden" name="application_type" value="{{ Request::get('application') }}">
      <button type="submit" class="btn btn-primary">Submit</button>
    </div>
  </div>
</form>

控制器收到:

public function store(Request $request)
{

    $requestData = $request->all();

    $requestData['application_id'] = strtolower(trim($requestData['application_id'].'.'.config('app.fqdn_base')));

    $request->replace($requestData);

    $values =  $this->validate($request, [
        'application_type' => 'required|exists:applications,name',
        /* other validations */
    ]);

    $exitCode = Artisan::call('tenant:create', [
        /* passing param here */
    ]);

    $host = Hostname::where('fqdn', $values["application_id"])->first();
    $web = $host->website;

    $web->name = $values["application_name"];
    $web->application_id = Application::where('name', '=', $values["application_type"])->pluck('id')->first();
    $web->owner = auth()->id();
    $web->save();

    $applications = Application::where('id', '!=', '0')->get();
    return view('admin.applications', [ "applications" =>  $applications]);
}

上面的代码工作正常,除了... CSRF 函数,我检查了我是否可以从请求中检索 CSRF 值。

但是,一旦我的交易完成并重定向到我想要的页面,如果我按 F5 它将重新提交表单,这应该会导致 CSRF 不匹配,但在我的情况下,它没有。

是否有打开 CSRF 验证的特定方法?

【问题讨论】:

  • 你能发布上述请求/功能的 HTTP 请求吗?
  • 请确保您没有从 CSRF 保护中排除上述 URL。参考:laravel.com/docs/5.6/csrf#csrf-excluding-uris
  • @SavanGadhiya,不,不排除。我可以看到 _token 是根据请求参数提交的:+request: ParameterBag {#43 ▼ #parameters: array:6 [▼ "_token" =&gt; "LI3A2K6NQiTYnBHJBNGMgV2bs7equWW8TnGZ999" "application_id" =&gt; "asdasdasm" "application_name" =&gt; "1asdas" "password" =&gt; "asdfasdf" "password_confirmation" =&gt; "asdfasdf" "application_type" =&gt; "emm" ] }

标签: laravel-5 csrf laravel-5.6 csrf-protection


【解决方案1】:

聚会迟到了,但我相信您的 CSRF 检查工作正常。

据我了解,Laravel 中使用的 VerifyCsrfToken 中间件只是指示是否应在响应上设置 XSRF-TOKEN,而 {{ csrf_field() }} 是获取 $session-&gt;token() 的辅助函数。由于您按 F5 重新提交表单,我相信 {{ csrf_field() }} 现在指向您的新会话令牌 cookie,并通过了检查。

您没有通过 AJAX/Axios 提交表单,因此 Laravel 应该处理整个请求,其中一部分包括验证您当前会话中的 CSRF 令牌,而不是验证您的 CSRF 令牌的保存/序列化版本上一届会议。

【讨论】:

    猜你喜欢
    • 2018-02-01
    • 2019-03-22
    • 2018-07-13
    • 1970-01-01
    • 2016-01-08
    • 2014-07-12
    • 2017-12-14
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多