“同源政策”能给我们带来啥?

Posted

技术标签:

【中文标题】“同源政策”能给我们带来啥?【英文标题】:What can "Same Origin Policy" buy us?“同源政策”能给我们带来什么? 【发布时间】:2012-08-12 11:48:38 【问题描述】:

同源策略 (SOP) 经常与跨站脚本 (XSS) 一起被提及。但似乎在有 SOP 的世界里,XSS 仍然时有发生。 所以我一直不清楚同源策略到底能防止什么样的攻击? 换句话说,想象一个没有 SOP 的世界,与有 SOP 的现实世界相比,恶意攻击者还能获得什么其他权力?

我在本网站 (http://security.stackexchange.com/questions/8264/why-is-the-same-origin-policy-so-important) 上读到“假设您已登录 Facebook 并访问另一个浏览器选项卡中的恶意网站。如果没有同源策略,该网站上的 javascript 可能会对您的 Facebook 帐户做任何您被允许做的事情。”。这实际上让我更加困惑,因为我从未听说过一个选项卡中的网页有任何机制来操纵其他选项卡,即使来自同一个域也是如此。 这里 (http://javascript.info/tutorial/same-origin-security-policy) 还提到(更明确地)SOP 阻止脚本在一个窗口中操作另一个窗口中的 DOM 元素。但我真的无法将示例与解释的内容联系起来(window 在这里是什么意思?似乎示例在谈论 iframe)。

总之,谁能给出一些具体的例子来说明如果没有 SOP 会发生什么?

另外,我很好奇一个窗口中的脚本如何在另一个窗口中操作 DOM 元素,假设这两个窗口来自同一个域。但这不是本题的主菜

谢谢!

【问题讨论】:

我认为 OP 有同样的困惑。 SOP适用于两件事:1.防止来自域A的脚本访问并操纵来自域B的页面的属性或方法。2.防止来自域A的脚本向域B的服务器发出请求。但是到第2点,现在有一个 W3C 标准 CORS 允许跨域请求例外。第 1 点仍然是严格不允许的。因此,在另一个选项卡中操作 DOM 元素实际上是针对 SOP 涵盖的点 1。 【参考方案1】:

我从未听说过一个选项卡中的网页操作其他选项卡的任何机制 [...] 似乎该示例正在谈论 iframe

iframe 是获取跨窗口脚本的最简单但不是唯一的方法。另一种方法是让攻击者页面将window.open 的文档从facebook.com 放入一个新选项卡。因为open 返回选项卡的window 对象的句柄,所以一个选项卡中的脚本可以与另一个选项卡中的内容进行交互。

如果没有 SOP,该脚本可以代表您填写并提交该选项卡中的表格。

XSS 仍然不时发生。所以我一直不清楚同源策略到底能防止什么样的攻击?

如果没有 SOP,每个网页都容易受到 XSS 的攻击,并且没有人可以保证安全。

借助 SOP,网页可以安全地抵御 XSS,除非其作者犯了错误。 XSS 仍然不时发生,因为不幸的是,网站作者确实犯了错误。

【讨论】:

【参考方案2】:

一个例子:对于恶意网页,可能会向用户已经在用户上下文中登录的其他网页发出一些 javascript ajax 请求。此其他页面将假定请求来自授权用户。 例如,如果只有用户登录到 Facebook 或他的银行,malicius 脚本可以对 Facebook 进行一些 ajax 调用并发布新状态或银行交易服务并进行转账。人们通常会同时在浏览器选项卡中打开许多页面,因此浏览恶意网页的人很可能同时登录到某些可能被黑客入侵的敏感服务。

【讨论】:

您的意思是用户在他/她的浏览器中登录了 Facebook。一个恶意网站,比如 foo.com,包含 javascript 来向 facebook 发送 http 帖子以发布状态。如果用户访问 foo.com,状态更新会发布到他/她的 Facebook 页面吗? @Awaken 完全正确。 Foo.com 将能够在登录到其他服务的用户范围内做任何事情。

以上是关于“同源政策”能给我们带来啥?的主要内容,如果未能解决你的问题,请参考以下文章

将 Rails 服务器绑定到 0.0.0.0 能给你带来啥?

为啥以及如何在脚本标签中免除同源策略?

云计算与大数据合体,能给我们带来什么?

分享 | 云计算与大数据合体,能给我们带来什么?

拓展给企业、个人、团队带来啥好处!

浏览器同源政策及其规避方法