【发布时间】:2013-03-21 12:32:45
【问题描述】:
首先道歉:这对我来说就像一个“愚蠢”的问题,我希望我很快就会后悔问这个问题......但我现在无法弄清楚,因为我的思绪似乎陷入了困境错误的车辙。所以请耐心等待并帮助我:
我的理解是,“同源”是 Web 服务的一个痛点,作为回应,CORS 放宽了限制,足以使 Web 服务合理工作,但仍为用户提供良好的安全性。我的问题是 CORS 究竟是如何做到这一点的?
假设用户访问网站A,该网站提供了向网站Z发出Web服务请求的代码。但是我已经侵入并破坏了网站Z,并将其变成了攻击站点。我很快让它积极响应所有 CORS 请求(标题添加 Access-Control-Allow-Origin:“*”)。很快用户的电脑就被我来自Z的攻击颠覆了。
在我看来,用户从未直接访问过 Z,对 Z 的存在一无所知,也从未“批准”过 Z。而且在我看来——即使在入侵被知晓之后——什么都没有网站可以做些什么来阻止它(本身不能离线:-)。安全问题会不会要求 A 证明 Z,而不是 Z 证明 A?我错过了什么?
【问题讨论】:
-
通过选择首先向其发出 Web 服务请求而得到有效认证的 Z。
-
就像孩子们说的那样,这就是“lolorama”。
-
看来来自被颠覆网站的正确 CORS 标头确实有效地完全取消了浏览器的“同源”策略,对吧?那么,为什么还要让浏览器实现 CORS,而不仅仅是让它们放松“同源”政策呢?使用 OAuth 是否有效地承认 CORS 提供的用户安全性严重不足?如果网站 A 通过提供使用 Z 的 Javascript 代码来“认证”网站 Z(在其颠覆之前),那么从用户的角度来看,CORS 是否真的完全不相关? CORS 对其他人的意义真的和我一样吗?
-
我担心我们在谈论苹果和橘子。一个常见的问题 - 但不是我的 - 是提供服务的站点的安全性(在这种情况下为 Z) - 没有收费错误,没有拒绝更改,没有未经授权的访问等。我更关心的是安全性浏览器用户。从用户的角度来看,问题在于 Z(一个他从未真正访问过、从未收到过帐单、甚至可能不知道存在的网站)在他的计算机上放置了恶意软件。
标签: web-services http security cors same-origin-policy