4

我看过的大多数框架都会在表单中插入一个隐藏的输入元素,其值为 CSRF 令牌。这是为了防止用户 Bob 登录我的网站,然后访问http://badsite.com,该网站嵌入了 img 标签或 JS,告诉我的网站使用 Bob 仍然登录的会话执行请求。

我没有得到的是阻止 badsite.com 上的 JS 从 AJAX 请求带有我网站上的表单的 URL,从隐藏的输入元素对 CSRF 令牌进行正则表达式,然后使用该有效的 CSRF 令牌发布到我的网站的 AJAX ?

在我看来,您可能想在运行时使用 JS 将 CSRF 令牌插入表单,从 cookie 中提取值(badsite.com 无法访问)。但是,我没有听说过这种方法,而且很多框架都使用 CSRF 令牌进行简单的隐藏输入,我想知道我的解决方案是否过度设计,并且我错过了使隐藏输入法安全的某些部分.

任何人都可以提供一些清晰度吗?谢谢!

4

1 回答 1

4

是什么阻止了 badsite.com 上的 JS 从 AJAX 请求带有我网站上的表单的 URL

同源策略(除非您使用过于宽松的CORS标头来颠覆它)。未经该主机许可,在站点上运行的 JavaScript 无法从托管在其他主机上的站点读取数据。

SOP 有一些变通方法,但它们都需要正在从中读取数据的主机的合作(JSON-P,CORS),或者不传递任何识别特定用户的数据(所以不能访问任何需要授权的东西)。

于 2012-10-10T15:50:02.380 回答