【问题标题】:Should I disable CSRF validation?我应该禁用 CSRF 验证吗?
【发布时间】:2017-04-13 16:48:54
【问题描述】:

我目前正在开发一个关于 Laravel 的应用程序,这是一个在线测验。有恢复用户会话的功能。

这意味着如果用户在测验期间重新加载页面,他的会话将恢复他填写的回答。每次他对答案进行一些更改时,我都会使用 ajax 来存储用户会话。

所以,问题是如果用户选择答案的速度足够快以产生并发请求,Laravel 会终止用户会话,因此表单的 CSRF 令牌变得无效。

为解决此问题,我已禁用 ajax 请求的 CSRF 验证,因为我认为此请求不处理网站的任何敏感信息。

所以我想知道对此类路由禁用 CSRF 验证是否正确,或者我应该找到不同的解决方案?

【问题讨论】:

  • 为什么 Laravel 会终止会话? (好奇,因为我没用过 Laravel。)
  • @OliverCharlesworth 因为我想来自同一个令牌的请求太多了,因为到目前为止我还没有找到一个可靠的理由。这是满足该场景的唯一理论。
  • @OliverCharlesworth 正如我所读到的,如果来自同一用户的多个并发请求,它会终止会话。
  • 修复它并保留 CSRF 保护的最简单方法是在移动到下一页时保存数据。每次用户更改某些内容时,我真的不会保存数据。随着用户数量的增加,您的服务器会崩溃,并且会产生不必要的流量。

标签: php ajax laravel csrf csrf-protection


【解决方案1】:

为什么不创建一个额外的路由来传递一个新的令牌?所以你可以做一个异步查询来获取新的令牌,然后把它发回 laravel ?

像这样:

/**
 * @Get("auth/csrfToken")
 */
public function getToken()
{
  return csrf_token();
}

【讨论】:

  • 这听起来对我来说是个非常糟糕的主意
  • 为什么?你能激发“声音”吗……如果这条路线在 auth 保护之后……只有经过身份验证的用户才能访问它……然后删除 crsf 保护更安全
猜你喜欢
  • 2019-11-07
  • 2013-09-07
  • 2013-08-06
  • 2020-11-30
  • 2013-05-03
  • 2015-03-18
  • 2012-03-06
  • 1970-01-01
相关资源
最近更新 更多