为什么不在跨源上发送XSRF令牌?

时间:2017-05-22 17:04:28

标签: angularjs cors csrf x-xsrf-token

这是github上Angularjs 1.6.4中http.js文件的一个片段:

var xsrfValue = urlIsSameOrigin(config.url)
    ? $$cookieReader()[config.xsrfCookieName || defaults.xsrfCookieName]
    : undefined;
if (xsrfValue) {
    reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;
}

为什么只有在请求是针对同一来源的情况下才包含XSRF令牌?如果Restful后端位于与前端不同的主机上,不应该使用XSRF怎么办?

1 个答案:

答案 0 :(得分:1)

在这种情况下,XSRF保护的工作原理是将config.xsrfHeaderName标头中收到的令牌与作为cookie config.xsrfCookieName收到的令牌进行比较(请参阅针对xsrf的“双重发布”保护)。无论如何,cookie都不会被发送到其他来源,所以发送标题是没有意义的。

在这种情况下,另一个来源可能使用的身份验证不依赖于浏览器自动添加的内容(即cookie),但可能是基于大多数API的令牌。在这种情况下,它不容易受到xsrf的攻击。<​​/ p>