gpt4 book ai didi

javascript - 跨域 AJAX 请求未被阻止 : is this a security vulnerability?

转载 作者:数据小太阳 更新时间:2023-10-29 04:44:21 27 4
gpt4 key购买 nike

最近三天我研究了如何使用 XMLHttpRequest 进行跨域请求。最好的选择确实是我已经在使用的 JSONP。

但我仍然有一个问题,我无法在任何地方找到答案。我阅读了数百篇文章(包括 SO),但没有人有一个负责任的好答案(有很好的引用)。希望这里有人可以提供帮助。

也就是说,我在许多网站上看到,由于安全原因,我无法从域 example.com 向 yyy.com 发出 Ajax 请求并获取我想要的数据。这很清楚,我对此毫无疑问。但问题是当我在我的本地主机中运行下面的代码时(所以我的域是“本地主机”,我不应该能够从另一个域请求任何数据)。

xhReq = new XMLHttpRequest();
xhReq.open("GET","http://domain.com.br?parameter",true);
xhReq.send(null);

当我检查 Firebug 网络选项卡时,我发现请求没有被阻止!这是明确要求的。我简直不敢相信。所以我在 domain.com.br/log.php 中创建了一个文件,我可以在其中记录任何访问我的域的请求。令人惊讶的是,我向 localhost 发出的所有请求都击中了我的 domain.com.br。当我试图获取响应时,由于我的 Chrome 和 FIrebug 浏览器的同源策略,我真的无法得到它。但令我感到非常惊讶的是,尽管我无法操纵响应,但请求确实到达了网络服务器。

更令人惊讶的是,如果 domain.com.br/log.php 生成了一个大约 1MB 的巨大响应,我的 Firebug 告诉我浏览器确实从网络服务器下载了所有 1MB,最后它显示一条消息“访问被拒绝”,正如预期的那样。那么,如果同源策略禁止读取该数据,为什么还要下载所有文件。

最后,让我感到惊讶的是,我阅读的所有网站和规范都非常清楚地表明,当目标域与源域不匹配时,请求将被使用 Ajax 阻止。但显然,通过我的实验,请求正在完成,尽管我无法访问响应数据。

让我不高兴的是它可能会打开一个巨大的安全漏洞,每天有数千次浏览的网站可以运行这 3 行代码,并在一个不友好的网站中造成巨大的 Ddos 攻击,只是让用户请求一个页面由于浏览器不会阻止请求,因此会每隔一小段时间访问另一个网站。

我在 IE 7、8 和 9 以及最新的 Chrome 和最新的 Firefox 中测试了这个脚本,行为是相同的:请求已完成,浏览器下载所有响应,但无法执行 SOP。

希望有人能向我解释为什么规范如此错误或者我理解错误的地方!

最佳答案

可以发出请求,并且服务器可以生成响应,而不管 CORS。但是,响应 可能会被隐藏。巴尔法wrote about this in his blog最近:

Note that the same origin policy doesn't necessarily prevent the request per se – it just prevents the response from being accessible. A malicious site can e.g. just redirect your browser, or submit a form, or include an image or an iframe – in all those cases a request is made to your site; the evil site just doesn't see the response.

在某种程度上,浏览器必须向服务器发出请求,以查看它是否提供“Access-Control-Allow-Origin” header 。请记住,CORS 完全由浏览器实现。有人可能只编写一个控制台应用程序来向您的服务器发出请求,因此您不应依赖 CORS 来确保请求仅来自您自己的站点。

关于javascript - 跨域 AJAX 请求未被阻止 : is this a security vulnerability?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19690117/

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