元标记中带有令牌的 CSRF 保护 - 为什么它不能被盗?

CSRF Protection with tokens in meta tag - why can't it be stolen?

关于能够在 ajax 调用中包含 csrf 预防令牌的建议是将它们作为元标记包含在您的页面中,然后可以访问并包含在 header 中。 http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html

这怎么不能被利用?例如,如果 example.com 在元标记中包含 csrf 令牌,我是否可以创建一个恶意站点,其中包含一些 javascript 将调用 example.com,然后解析响应,找到meta标签,然后将token值注入到我的恶意页面表单中?

CSRF 令牌对于每个会话都是唯一的。一旦生成,它只能使用一次,绑定到特定会话。

恶意人员可能会生成一个,但这将特定于他们的浏览器会话。简而言之,他们只会用它来剥削自己。

至于通过JavaScript产生攻击,这确实是一个独立于CSRF的问题。 CSRF 是一种类似 this one from Wikipedia:

的攻击
<img src="http://bank.example.com/withdraw?account=Alice&amount=1000000&for=Mallory"/>

防范恶意软件 JavaScript 是另一回事。网站保护自己不受 XSS and other types of JavaScript injection by scrubbing user input, iframe sandboxing, and relying on the same-origin policy 的影响。

TL;DR

如果您的站点 运行 其他人不信任 JavaScript,那么您的问题比 CSRF 更大。

Alice 浏览器 chuck.com 中的脚本 运行 由于 http://en.wikipedia.org/wiki/Same-origin_policy 无法读取 carol.com 的内容。

chuck.com 上的脚本可以POST 到carol.com,但无法读取和解析其内容。