5

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

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

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

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

4

2 回答 2

4

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

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

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

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

于 2012-06-01T09:10:00.410 回答
3

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

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

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

于 2012-05-31T16:33:13.530 回答