CORS 如何比没有跨域限制更安全?在我看来,它可以被恶意使用

Posted

技术标签:

【中文标题】CORS 如何比没有跨域限制更安全?在我看来,它可以被恶意使用【英文标题】:How is CORS safer than no cross domain restrictions? It seems to me that it can be used maliciously 【发布时间】:2012-06-05 22:38:28 【问题描述】:

我已经阅读了一些关于解决跨域策略的文章,现在知道两种方法对我有用,但我很难理解 CORS 比完全没有跨域限制更安全.

据我了解,之所以设置跨域限制,是因为理论上可以将恶意脚本插入到用户正在查看的页面中,这可能导致将数据发送到未关联的服务器(即不是相同的域)到用户专门加载的站点。

现在有了 CORS 功能,恶意人员似乎可以解决这个问题,因为允许授权跨域请求的是恶意服务器本身。因此,如果恶意脚本决定向设置了Access-Control-Allow-Origin: * 的恶意服务器发送详细信息,它现在可以接收该数据。

我确定我在这里误解了一些东西,有人可以澄清一下吗?

【问题讨论】:

【参考方案1】:

我认为@dystroy 有一定的意义,但不是我想要的全部。这个答案也有帮助。 https://***.com/a/4851237/830431

我现在明白,这与防止发送数据无关,更多的是与防止未经授权的行为有关。

例如:您登录的网站(例如社交网络或银行)可能会通过您的浏览器打开一个受信任的会话。如果您随后访问一个狡猾的站点,他们将无法使用您登录的站点执行跨站点脚本攻击(例如发布垃圾邮件状态更新、获取个人详细信息或从您的帐户转账),因为跨域限制策略。他们能够执行跨站点脚本攻击的唯一方法是浏览器未启用跨站点限制,或者社交网络或银行已实施 CORS 以包含来自不受信任域的请求。

如果一个网站(例如银行或社交网络)决定实施 CORS,那么他们应该确保它不会导致未经授权的操作或未经授权的数据被检索,但是像新闻网站内容 API 或雅虎管道这样的东西在 * 上启用 CORS 不会有任何损失

【讨论】:

【参考方案2】:

您可以设置比“*”更精确的来源过滤器。

如果您决定打开您的特定页面以包含在另一个页面中,这意味着您将承担后果。

但主要问题不是服务器可以接收奇怪的数据:这不是什么新鲜事:服务器接收到的所有内容都是可疑的。该保护主要是针对不能被异常的来源组合滥用的用户(例如,能够读取全集数据的全集用户)。因此,如果您允许页面的所有来源,请不要将您只想与您的用户共享的数据放入内部。

【讨论】:

我的意思是合并。对不起我的英语不好。

以上是关于CORS 如何比没有跨域限制更安全?在我看来,它可以被恶意使用的主要内容,如果未能解决你的问题,请参考以下文章

CORS跨域

SpringMvc CORS跨域设置

Web API 2 对 CORS 的支持

CORS错误是什么如何解决?

跨域资源共享(CORS)

011天之跨域资源共享CORS