这是 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 吗?
XSRF 保护的工作原理是将 config.xsrfHeaderName
标头中收到的令牌与作为 cookie config.xsrfCookieName
接收的令牌进行比较(请参阅针对 XSRF 的"双重发布"保护(。无论如何,cookie 都不会发送到其他来源,因此发送标头没有意义。
在这种情况下,另一个来源可能使用不依赖于浏览器自动添加到请求中的某些内容(即 cookie(的身份验证,但可能像大多数 API 一样基于令牌。在这种情况下,它不容易受到 xsrf 的攻击。