【问题标题】:Same origin policy seemingly not working同源政策似乎不起作用
【发布时间】:2017-04-15 08:46:23
【问题描述】:

我正在尝试详细了解同源政策。为此,我试图看看它是如何与代码一起工作的(我是 web 开发中的一个完全的菜鸟),所以我启动了一个 Flask 服务器并创建了一个域 local.com 和一个子域 store.local.com。然后在子域的store.html 页面中,我创建了一个带有src=http://local.comiframe - 没有以任何方式修改document.domain 属性,如阅读here

现在从我所读的内容来看,我认为这会失败,但它正确地显示了超级域index.html 页面的内容。我已经重复了在两台不同的物理计算机上托管两个域的实验,但这并没有改变任何东西。 (我试过 Firefox 和 Chrome)

现在我也尝试了src=http://google.com,这实际上被 SOP 阻止了。所以目前我有点困惑,有人可以帮我理解一下吗?谢谢。

【问题讨论】:

  • 在我看来,SOP 允许访问同一域上的不同子域。其中 store.local.com 与 local.com 是同一个域,而 google.com 是一个完全独立的域。
  • 同源策略在 iframe 方面略有不同。默认情况下,它允许在 iframe 中显示页面,但是如果不合作,两者就无法通信。但是,iframe 中的页面可能会阻止您在 iframe 中显示该页面。

标签: javascript google-chrome firefox same-origin-policy


【解决方案1】:

IFrame 通常不受同源策略的约束。

但是,如果您在调用http://google.com 时查看 HTTP 响应标头,您将看到以下标头:

x-frame-options:SAMEORIGIN

这明确tells your browser that it should prevent the page from being displayed across origins


MDN describes this particular behavior:

以下是一些可以跨域嵌入的资源示例:

[...]

  • <frame><iframe> 的任何内容。网站可以使用X-Frame-Options 标头来防止这种形式的跨域交互。

【讨论】:

  • 谢谢。您能否建议我如何制作同源政策的工作示例?这可能是一件简单的事情,但我如何才能在页面上实际获取 javascript 以尝试访问另一个页面的 dom?
  • DOM 只存在于您的浏览器中。您可以对 SOP 下的 URL 进行 HTTP 调用,您应该会遇到您正在寻找的错误消息。查看XMLHttpRequests
猜你喜欢
  • 2014-05-03
  • 2011-08-17
  • 2018-07-23
  • 2016-05-22
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多