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



这是 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 的攻击。

相关内容

  • 没有找到相关文章