【问题标题】:How to generate new CSRF Token for each user request in Laravel?如何为 Laravel 中的每个用户请求生成新的 CSRF Token?
【发布时间】:2019-06-04 01:11:29
【问题描述】:

我想为用户提出的每个请求生成新的 CSRF 令牌。我确实理解这种技术不好,它不允许用户同时提出请求。但我仍然希望实现它。

我在 Middleware/VerifyCsrfToken 中有覆盖函数 addCookieToResponse。通过添加 $request->session()->regenerateToken()

protected function addCookieToResponse($request, $response)
{
    $config = config('session');
    $request->session()->regenerateToken();

    $response->headers->setCookie(
        new Cookie(
            'XSRF-TOKEN', $request->session()->token(), $this->availableAt(60 * $config['lifetime']),
            $config['path'], $config['domain'], $config['secure'], $config['http_only'], false, $config['same_site'] ?? null
        )
    );

    return $response;
}

令牌不断变化,但在 POST 请求期间,由于 csrf_token() 令牌已旧,我收到了 TokenMismatchExcemption。似乎在 addCookieToResponse() 之前调用了 crsf_token()。有没有更好的方法来实现这种技术?

【问题讨论】:

  • 这是因为,POST请求也会生成一个新的Token。我很好奇你为什么要这样做?
  • @Mozammil 由于某些安全要求,我必须实现这一点。更多地了解它会导致进一步的复杂化和误解。只是需要继续前进的方法

标签: php laravel laravel-5


【解决方案1】:

嗯,你想要实现的目标有点奇怪,但我认为这就像一个中间件:

$response = $next($request); // process petition

$request->session()->regenerateToken(); // regenerate token

return $response; // send response

请分享结果

【讨论】:

  • 它不起作用。 TokenMismatchExcemption 引发的相同错误
猜你喜欢
  • 2013-04-25
  • 2012-09-18
  • 2019-01-22
  • 2015-06-20
  • 2020-07-02
  • 2019-10-16
  • 2014-03-05
  • 1970-01-01
  • 2014-11-01
相关资源
最近更新 更多