【问题标题】:Chrome blocks different origin requestsChrome 会阻止不同的来源请求
【发布时间】:2013-11-19 04:21:53
【问题描述】:

当脚本试图访问来自不同来源的框架时,Chrome 会阻止它并抛出异常

“未捕获的安全错误:阻止具有源“提供程序域”的帧访问具有源“mydomain”的帧。协议、域和端口必须匹配”。

在谷歌浏览器中进行了一些更新后,我收到了这个错误。有什么建议吗?

【问题讨论】:

  • 如果它是您尝试访问的 SSO 内容,则可能是模式对话框或弹出窗口。

标签: javascript google-chrome


【解决方案1】:

框架和/或窗口之间的直接 Javascript 调用仅在符合 same-origin policy 的情况下才被允许。如果您的窗口和 iframe 共享一个共同的父域,您可以将 document.domain 设置为“domain lower”)一个或两个,以便它们可以通信。否则,您需要查看 postMessage() API 之类的内容。

【讨论】:

  • 这个答案不正确。我有两个框架,它们都在我的硬盘上(绝对是同一个来源),一个框架甚至无法获取另一个框架的 URL。这只发生在 Chrome 中。在 Firefox 或 IE 中没有问题。
  • @Elmue "file:" URI 在同源策略方面是特殊的,部分原因是它们通常没有域组件并且本地文件访问充满了安全风险。顺便说一句,如果opener 页面位于同一目录中或“上方”,则 SAF 和 FF 似乎只允许文件:页面进行通信。无论如何,Chrome 在浏览器安全行为方面通常处于领先地位,因此如果 FF 和 SAF 在某个时候效仿,请不要感到惊讶。
【解决方案2】:

这是一个安全更新。如果攻击者可以修改 Web 服务器中的某些文件(例如 JS 文件),他可以使每个加载的页面都下载另一个脚本(例如键盘记录您的密码或窃取您的 SessionID 并将其发送到他自己的服务器)。

为避免它,浏览器检查Same-origin policy

您的问题是浏览器正在尝试使用您的脚本(通过 Ajax 请求)加载另一个域(或子域)上的内容。 为了避免它(如果它在您自己的网站上),您可以:

【讨论】:

  • 那么为什么当我调用 paypal.checkout.setupfacebook.login 函数时浏览器不会抛出这个错误?这完全是跨域请求,从我的 url 到 PayPal url!为什么没有错误?
  • 因为我认为您加载的具有这些功能的 javascript 在他们的网站上。例如,您将拥有 <script src="facebook.com/foo.js"> 或更常见的一段代码来创建此标签。
猜你喜欢
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 2018-12-31
  • 2020-05-27
  • 2018-12-01
  • 2015-02-15
相关资源
最近更新 更多