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



我正试图了解csrf保护,但我很难理解。也许有人能给我所需要的洞察力:(。

我的理解

假设我们没有csrf保护。有人使用他/她的凭据登录到网站a。有效登录后,会话cookie将存储在浏览器中。用户通过表单发布一些数据,服务器就可以顺利接受。由于我们没有csrf保护,这打开了系统的漏洞。

用户访问了另一个网站B,这是一个类似网络钓鱼的恶意网站。该网站在后台向网站A发布一些javascript xhr请求。浏览器存储了网站A的cookie,由于用户已经登录,这是一个有效的会话。因此,网站A将毫无问题地接受该帖子。

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

问题

如果恶意网站B首先向呈现表单的页面发出get请求。它将能够获取令牌,然后与post请求一起发送。正确的我是不是错过了一些显而易见的东西?

谢谢!

我知道您担心的是恶意网站可能会请求您的反CSRF令牌。

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

大多数现代浏览器默认情况下会阻止跨源请求。当您确实需要自己域的跨源请求时,您可以通过设置正确的跨源标头(如Access-Control-Allow-Origin: sub.domain.com(来做到这一点吗。要防止嵌入iframe,可以实现X-Frame-Options:DENYSAMEORIGIN

您可以在上找到更多信息https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

最新更新