我应该什么时候生成一个新的 CSRF 令牌

信息安全 csrf
2021-09-10 13:52:02

我正在我们的应用程序框架中构建一个 CSRF 预防方法。除其他外,我使用OWASP 站点

我们选择了OWASP CSRF 备忘单中描述的“双重提交 Cookie”预防措施

备忘单指出:

当用户对站点进行身份验证时,该站点应生成(加密强)伪随机值...

听起来用户必须先登录,然后才能生成 CSRF 令牌(又名“(加密强)伪随机值”)。

但是如何保护无需身份验证即可访问的表单?想想“忘记密码”和登录表单。

我认为文本应该是“当用户进入一个站点时,该站点应该生成一个(加密强)伪随机值......”

这也更容易实现,就像我通过以下方式所做的那样:

  • 应用程序检索 GET 请求:生成 CSRF(会话)cookie(如果 cookie 尚未在请求中)
  • (其他)应用程序检索非 GET(POST、PUT 等)请求:使用请求中的 CSRF 令牌验证 CSRF cookie。

我在这里错过了一个重要方面吗?

1个回答

通常,您不会保护无需身份验证即可访问的表单。CSRF 攻击的目的通常是让攻击者利用攻击者的数据和受害用户的经过身份验证的会话来操纵经过身份验证的用户在站点上执行操作。不需要身份验证的表单通常不易受到这种方式的操纵。

因此,CSRF 缓解措施通常使用假设/要求用户经过身份验证才能存在漏洞的语言来构建。集中未经身份验证的形式将威胁模型更改为对给定交互可能有效但非标准的威胁模型。

你的方法

从安全角度来看,您的方法看起来不错。它消除了在没有前面的 GET 的情况下生成 POST 或 PUT 的能力,但是对于通常不应该成为问题的基于浏览器的界面,并且对于这种特定的威胁模型,这正是您所需要的。