同源策略与 CORS 的用处

Posted

技术标签:

【中文标题】同源策略与 CORS 的用处【英文标题】:Usefulness of Same Origin Policy with CORS 【发布时间】:2014-03-12 12:20:57 【问题描述】:

我已经阅读了一些关于同源策略和 CORS 的文章,但仍然不太了解它给用户带来的安全性。

同源策略提供了真正有价值的安全性,防止来自某个来源的网站访问另一个网站上的某些网页内容。从而防止容器脚本访问 iframe 内容的威胁,可能是伪造/钓鱼网站。

但是这里出现了 AJAX 和 CORS。 CORS 使服务器能够控制哪些来源可以访问它。但是,最后,如果不允许,浏览器会在标头手工检查后停止请求。

所以,假设您访问了一些恶意网站 myphishing.com。您想通过 AJAX 请求向该网站显示来自另一个受信任网站 mybank.com 的信息。这个由配置良好的 CORS 标头保护,仅允许来自 mybank.com 来源的请求。如果我是 myphising.com 的作者,通过代理将所有请求中继到 mybank.com,该代理会更改请求和响应方式中的标头以伪造客户端浏览器和银行服务器?似乎可以更改 mybank.com 请求中的 origin 标头,并更改 CORS 响应标头以使浏览器认为 myphishing.com 被允许发出请求。 Headers handcheck 已通过,然后您可以发送请求并使用类似的 headers 替换技巧获取响应。

也许我完全被误导了,但如果有人能告诉我我在哪里误解了整个事情,我会非常高兴。

可能重复,但我在这里没有找到答案:What is the threat model for the same origin policy?。

【问题讨论】:

【参考方案1】:

如果我是 myphising.com 的作者,通过一个代理将所有请求中继到 mybank.com,该代理会更改请求和响应方式中的标头到伪造的客户端浏览器和银行服务器?

不管有没有 CORS,你都可以这样做。

但是,如果请求来自您的代理,那么它无法知道如果请求来自浏览器,浏览器将向服务器发送什么凭据。

【讨论】:

好的,所以 CORS 仅对基于凭证安全的服务器有价值:HTTPS 还是 cookie?我记得cookie也可以通过代理更改,所以不确定它是否足够安全。而且我的问题仍然有效:CORS 的同源策略以何种方式确保完全可靠的安全性? 同源策略仅在处理个性化数据时才有价值。它阻止 Mallory 的网站向 Alice 的浏览器提供 javascript,该 JavaScript 从 Bob 的网站获取 Alice 的数据并将其提供给 Mallory。当 Bob 想要将数据(可能是也可能不是个性化的)共享给其他站点时,CORS 可以关闭同源策略。 我明白了。但是,如果 Mallory 通过自己的代理代理从 Alice 到 Bob 的所有请求呢?这是不可能的情况还是 CORS 是如何防止的? 那么要么 (1) 他们说服 Alice 重新配置她的网络设置,但 Alice 没有希望,要么 (2) 他们在 Mallory 的服务器上提供 Alice 的 URL,因此它不会发送它的凭据知道用于 Bob 的服务器。 好的。谢谢你的亮点。它证实了我的想法:CORS 只有在您为您的服务设置凭据系统时才有用。

以上是关于同源策略与 CORS 的用处的主要内容,如果未能解决你的问题,请参考以下文章

同源策略与CORS

同源策略:JSONP和CORS

同源策略CORS

前端安全之同源策略CSRF 和 CORS

同源策略和跨域解决方案 CORS

同源策略和跨域解决方案 CORS