【发布时间】:2011-02-01 17:55:58
【问题描述】:
我正在阅读有关 CORS 的信息,我认为实现既简单又有效。
但是,除非我遗漏了什么,否则我认为规范中遗漏了很大一部分。据我了解,是外部站点根据请求的来源(并且可以选择包括凭据)决定是否允许访问其资源。这很好。
但是如果页面上的恶意代码想要将用户的敏感信息发布到外部站点怎么办?外部站点显然要对请求进行身份验证。因此,如果我没有遗漏什么,CORS 实际上可以更轻松地窃取敏感信息。
我认为,如果原始站点也可以提供其页面允许访问的服务器的不可变列表,那将更有意义。
所以扩展的序列将是:
- 提供包含可接受 CORS 服务器(abc.com、xyz.com 等)列表的页面
- 页面想要向 abc.com 发出 XHR 请求 - 浏览器允许这样做,因为它在允许列表中并且身份验证正常进行
- 页面想要向恶意网站发出 XHR 请求 - 请求在本地被拒绝(即被浏览器拒绝),因为服务器不在列表中。
我知道恶意代码仍然可以使用 JSONP 来完成它的肮脏工作,但我原以为 CORS 的完整实现将意味着脚本标签多站点漏洞的关闭。
我还查看了官方 CORS 规范 (http://www.w3.org/TR/cors),但找不到任何关于此问题的提及。
【问题讨论】:
标签: javascript ajax xss xmlhttprequest cors