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

时间:2015-03-06 16:18:45

标签: javascript spring spring-security csrf csrf-protection

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

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

2 个答案:

答案 0 :(得分:2)

CSRF令牌对每个会话都是唯一的。一旦生成,它只能使用一次,与特定会话相关联。

恶意的人可以获得一个,但它将特定于他们的浏览器会话。简而言之,他们只会用它来开发自己。

至于通过JavaScript产生攻击,它实际上是一个与CSRF分开的问题。 CSRF是一种类似this one from Wikipedia的攻击:

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

防范恶意JavaScript是一个不同的故事。通过清除用户输入,iframe沙盒和依赖XSS,网站可以保护自己免受same-origin policy和其他类型的JavaScript注入攻击。

<强> TL; DR

如果您在网站上运行其他人不受信任的JavaScript,那么您遇到的问题比CSRF更严重。

答案 1 :(得分:2)

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

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