为什么没有凭据的CORS被禁止?

问题描述 投票:5回答:1

我试图理解为什么不允许没有凭据的跨域请求(默认情况下,没有设置服务器以返回Access-Control-Allow-Origin标头)。当一个请求具有凭据时,一切都非常简单-如果您已登录,则可以代表您在其他站点(例如在Facebook上)代表您执行某些恶意操作。

例如,请求

xhr = new XMLHttpRequest();
xhr.open('GET', 'http://www.google.com');
xhr.send();

产生错误(我在此站点的Chrome控制台中执行了该错误:

XMLHttpRequest无法加载http://www.google.com/。没有请求中存在“ Access-Control-Allow-Origin”标头资源。因此,不允许原点“ http://stackoverflow.com”访问。

因此,服务器必须发送适当的标头(例如Access-Control-Allow-Origin:*),此请求才能正常工作。

这只是一个简单的请求,不会发送任何cookie。这样限制的原因是什么?如果允许此类CORS,可能会发生什么安全问题?

没有凭据-没有cookie:XMLHTTPRequest的默认设置为withCredentials = false,因此在请求-link中不发送任何cookie。

javascript xmlhttprequest cors same-origin-policy
1个回答
9
投票

我将继续从Security.SE的Why is the Access-Control-Allow-Origin header necessary?中大量盗用>

这里主要关注的是基于网络拓扑的访问控制。假设您在家庭网络上运行HTTP服务(实际上,如果路由器本身具有Web界面,几乎可以肯定的话)。我们将此服务称为R,只有连接到家庭路由器的机器才能使用该服务。

[当您的浏览器访问evil.example.com时,该站点为您的浏览器提供了一个脚本,告诉它获取R的内容并将其发送回evil.example.com。即使没有凭据,这也可能很糟糕,因为这违反了以下假设:本地网络外部的任何人都无法查看本地网络中运行的服务。同源策略阻止了这种情况的发生。如果同源策略仅在涉及凭证时才起作用,则将有可能绕过基于拓扑的保护。

还请考虑一些公共服务允许基于IP地址的访问:

  • [牛津英语词典将其在线条目的访问限制为来自订阅大学的IP地址
  • 英国将对BBC内容的访问限制为该国家/地区的IP地址
  • 在这里列出的所有情况下,浏览器都可以用作为其提供脚本的任何网站的不知名代理。

© www.soinside.com 2019 - 2024. All rights reserved.