Access-Control-Allow-Credentials 有什么意义?

Bac*_*ave 5 http csrf same-origin-policy cors

发送 cookie 的默认值为SameSite=Lax,这意味着 GET 请求会发送 cookie,但 POST 会被阻止。

对于跨源 GET 请求,响应会由于 而被阻止Same-Origin-Policy,除非响应包含Access-Control-Allow-Origin

为什么还不够Access-Control-Allow-Origin

为什么你想回来Access-Control-Allow-Origin: someDomain.com却不回来Access-Control-Allow-Credentials

为什么允许来自受信任域的跨源 GET 请求,但仅在发送 cookie 时才阻止响应?

Kev*_*nry 3

在存在 cookie 的情况下,允许跨源共享的风险要大得多,因为这可能会将用户的私人信息泄露给恶意脚本。如果没有 cookie,脚本只能访问公共信息\xe2\x80\x94,这些信息与只需从任何计算机导航到 URL 即可访问的信息相同。

\n

因此,该标志的存在标志着Access-Control-Allow-Credentials一个重要的安全拐点,并有效地区分共享公共信息和私人信息。

\n

例如,假设您有一个用于分发股票行情数据的 API,并且您希望允许其他站点的脚本访问该 API。CORS 是必要的,因为同源策略将阻止这些脚本查看数据。不过,不需要 cookie。所以该网站可以简单地使用*Access-Control-Allow-Origin完成。不存在共享任何私人数据的风险。

\n

相比之下,想要启用用户特定数据共享的站点必须通过设置来选择Access-Control-Allow-Credentials加入true。此外,站点被迫指定允许的特定站点,因为在这种情况下*无效Access-Control-Allow-Origin

\n

  • @DavidKlempfner:当然,这是可能的。但事实上,可以解决协议功能并不意味着它是多余的。在我看来,这两个标头代表了两个不同的概念(*我与哪些网站共享?*和*我共享私人信息*?),将它们混为一谈会令人困惑,并会消除一些用例,而没有真正的好处。 (3认同)