【发布时间】: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 由于某些安全要求,我必须实现这一点。更多地了解它会导致进一步的复杂化和误解。只是需要继续前进的方法