CSRF 安全吗?

Is CSRF safe at all?

很多人都在谈论实施 CSRF 来阻止网页上的跨站点攻击。但我认为很容易破坏 CSRF 并向服务器发出请求。

那么它是如何工作的?

  1. 您从一个页面开始,呈现一个表单并使用 CSRF 令牌保留一个隐藏字段。
  2. 提交表单时,其他页面将需要 CSRF 令牌以验证请求。
  3. 在验证请求时,服务器将使用秘密检查 CSRF 令牌以查看令牌是否有效。
  4. 现在秘密本身存储在会话或 cookie 中。

这意味着如果我访问一个网站,从网页复制 CSRF 令牌,并从浏览器网络选项卡复制会话值。在此之后我可以构造一个 CURL 请求,设置这些值并尽可能多地发出请求。

那么 CSRF 到底需要什么?

您定义的场景不是CSRF

你的场景

爱丽丝访问鲍勃的网站。爱丽丝从鲍勃的网站上得到一个 cookie。 Alice 使用该数据向 Bob 的网站发出她设计的请求。

这很好。这里发生的一切都在爱丽丝和鲍勃之间。

如果 Bob 不能相信 Alice 会发送好的数据,那这就完全是另一个问题了。

CSRF 场景

爱丽丝访问鲍勃的网站。爱丽丝从鲍勃的网站上得到一个 cookie。爱丽丝访问 Mallery 的网站。 Mallery 的网站触发向 Bob 的网站提交表单。 Bob 接受了数据,因为它来自 Alice 的浏览器和 Alice 的 cookie。

即Mallery 的站点正在伪造 Alice 对 Bob 站点的请求。

anti-CSRFtoken是为了防止Mallery通过Alice的浏览器发起请求(因为Mallery无法获取token放入表单数据,所以无法匹配cookie中的token ).