我需要没有用户或登录的 CSRF 保护吗?

Do I need CSRF-protection without users or login?

我正在构建一个 Django 应用程序,人们可以在其中注册事件。每个人都可以注册,没有用户帐户或登录,即没有身份验证。验证是通过一封带有 link 的电子邮件完成的,必须单击该电子邮件才能激活注册。 我不确定是否需要为这些表单启用 CSRF 保护。它归结为以下问题: CSRF 保护是否对每个 POST-请求(不离开域)或仅对登录用户的 POST-请求是必要的?

CSRF 攻击可以做什么?我知道你可以用它来规避同源策略和 post 任何你想要的用户名,但你也可以用它来改变用户的真实 post 或窃取他们的数据?如果恶意站点可以获悉用户 post 编辑的数据或悄悄更改他们的请求,这将是我使用它的理由。如果它只是意味着另一个网站可以创建额外的注册,那么不,因为其他人也可以。 (我知道在任何地方使用它都不会花费太多,我实际上可能会这样做,但我试图更好地理解原理)

CSRF 攻击依赖于这样一个事实,即浏览器将发送您提供给它的信息来识别您的用户(通常是 cookie)以及对您网站的请求,即使是第三方触发的请求(如恶意脚本) ).

如果您没有用户,并且没有向浏览器发送任何此类信息,则您的应用程序不会受到 CSRF 的威胁。

与另一个答案相反,CSRF 从根本上说不是关于发送 cookie。 CSRF 是关于另一个网站能够让访问它的用户向您的应用程序发送请求。如果有一个会话,它需要通过像 cookie 这样的东西才能成功,因为例如 cookie 会自动发送。但是还有其他形式的身份验证会自动发送,例如客户端证书。

另外如果没有身份验证,更简单,可以进行请求。这听起来也是你的问题。

另一个网站可以做的是,如果用户访问他们,他们可以让该用户您的应用程序中执行操作。例如,他们可以让他们注册一个事件,而他们甚至都没有注意到。或者如果可能的话,恶意网站可以取消人们对事件的注册。他们可以 以受害者用户的名义 在您的网站上做任何可能的事情,而受害者并不知情,只需让他们访问恶意网站即可。

所以换句话说,问题不是另一个网站可以在您的应用程序中执行操作 - 如果没有身份验证,他们也可以在启用 CSRF 的情况下执行此操作。但是如果没有 CSRF 保护,他们可以让您的用户无意中在您的应用程序中执行操作,只需让他们访问恶意网站即可。

只有您自己知道,这是否是您的问题所在。没有更多信息,我认为你应该启用 CSRF 保护。