CSRF 请求 nonce 使得恶意 POST 成为可能?

CSRF Requesting the nonce makes malicious POST possible?

我正在努力解决 csrf 保护问题,但有些事情我很难理解。也许有人可以给我所需的见解:)。

我的理解

假设我们没有 csrf 保护。有人使用 his/her 凭据登录网站 A。有效登录后,会话 cookie 将存储在浏览器中。用户通过表单发布一些数据,服务器可以毫不费力地接受它。由于我们没有 csrf 保护,因此系统容易出现漏洞。

用户访问另一个网站B,一个类似钓鱼的恶意网站。例如,该网站正在 post 向网站 A 发送一些 javascript xhr 请求。浏览器存储了网站 A 的 cookie,并且由于用户已经登录,所以这是一个有效的会话。因此网站 A 将毫无困难地接受 post。

为了解决这个 csrf 保护,从服务器加载网站 A 上的表单页面时,会生成一个随机数(一次性代码)。此代码必须与表单一起提交,以便服务器可以检查此 post 是否来自请求表单的同一会话。如果代码与刚刚生成的代码相同,则接受表单。如果代码丢失或不正确,服务器将拒绝。

问题

如果恶意网站B首先向呈现表单的页面发出get请求。它将能够获取令牌以便随后与 post 请求一起发送。正确的?我是否漏掉了一些明显的东西?

谢谢!

我了解到您担心恶意网站可以请求您的 anti-CSRF 令牌。

您需要防止 cross-origin 读取或嵌入 returns CSRF 令牌的页面或端点。要记住的重要事情之一是 CORS 不提供 CSRF 保护,因为预检 CORS 请求并不总是由浏览器执行,例如在使用常规 html 表单时。

大多数现代浏览器默认阻止跨源请求。当您确实需要对自己的域进行跨源请求时,您可以通过设置正确的跨源 headers 来做到这一点,例如 Access-Control-Allow-Origin: sub.domain.com。 要防止嵌入 iframe,您可以将 X-Frame-Options: 实现为 DENY,或 SAMEORIGIN

您可以在 https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

上找到更多信息