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