不安全的 JavaScript 尝试使用 URL 访问框架

IT技术 javascript iframe webkit cross-domain
2021-01-13 13:05:12

当我尝试从包含另一个域 url 的 iframe 为父 url 设置哈希值时,出现以下错误:

不安全的 JavaScript 尝试从 URL“URL2”的框架访问 URL“URL1”的框架。域、协议和端口必须匹配。

我该如何解决这个问题?

6个回答

不允许从不同来源的子文档访问顶部窗口的location.hash属性,但可以设置location属性本身。

这意味着,鉴于顶部窗口位置是http://example.com/page/,而不是执行

parent.location.hash = "#foobar";

你确实需要知道父母的位置并且做

parent.location = "http://example.com/page/#foobar";

由于资源未导航,这将按预期工作,仅更改 url 的哈希部分。

如果您将其用于跨域通信,那么我建议您改用easyXDM

嘿@atul,请善待并将此答案标记为最佳答案。尊重那些让我们所有人都能从他人的知识中受益的惯例......
2021-03-24 13:05:12
徽章应该叫什么?“回复了一个懒惰的人”
2021-03-30 13:05:12
没有人将此标记为答案,但它有 60 个赞成票。这应该有一个徽章。
2021-04-01 13:05:12

当两个框架具有不同的域 -> 安全性时,跨框架脚本是不可能的。

看到这个:http : //javascript.about.com/od/reference/a/frame3.htm

现在回答您的问题:没有解决方案或变通方法,您只需检查您的网站设计为什么必须有来自不同域的两个框架来更改另一个的 url。

这是将第三方应用程序嵌入您的网站的常见要求,尤其是在无法选择 Web 服务等的情况下。
2021-04-13 13:05:12

当我尝试更改 iframe.src 的域时,我收到了相同的错误消息。

对我来说,答案是将 iframe.src 更改为同一域上的 url,但这实际上是一个 html 重定向页面到所需域。然后另一个域出现在我的 iframe 中,没有任何错误。

像魅力一样工作。:)

我相信 Tommy 所指的是服务器端代理。参见例如benalman.com/projects/php-simple-proxydeveloper.yahoo.com/javascript/howto-proxy.htmlgoogle.com/...或在stackoverflow.com/a/11224975/27938 上的René de Kat 的解决方案
2021-03-18 13:05:12
在最新的 Chrome 中不起作用:它不检查 src 参数,而是加载实际的 URL。所以不幸的是,重定向技巧没有任何帮助:-(
2021-03-24 13:05:12
你能更详细地说明你在这里做了什么吗?
2021-03-27 13:05:12
那很整齐。但它只是说明了解决这个问题是多么的微不足道。好的,让我们假设我是一个邪恶的恶意黑客,我想运行跨域脚本攻击。我很有可能会了解这些工具并使用它们。就浏览器安全修复而言,这很容易像 IE 不允许您在没有警告的情况下在本地运行 Javascript 一样迟钝。解决没有问题。创建一堆新的。
2021-03-30 13:05:12
如果您能简要解释一下,那将非常有帮助。
2021-04-03 13:05:12

解决方案可能是使用检索远程内容的本地文件

远程包含.php

<?php
$url = $_GET['url'];
$contents = file_get_contents($url);
echo $contents;

HTML

<iframe frameborder="1" id="frametest" src="/remoteInclude.php?url=REMOTE_URL_HERE"></iframe>
<script>
    $("#frametest").load(function (){       
    var contents =$("#frametest").contents();
});

这为跨站点脚本漏洞打开了大门。 一个可能的攻击示例: 1. 我在 myevilserver.com 上创建了一个看起来像您的站点的页面,包括一个登录表单,该表单可以发回 myevilserver.com 2. 我向您的用户发送了一份虚假的时事通讯,其中包含一个链接到https:// yoursite.com/remoteInclude.php?url=myevilserver.com 3. 他们在您的网站上看到我在我的服务器上捕获的登录表单。
2021-03-15 13:05:12
一个可能的解决方案是让 remoteInclude.php 根据预先批准的域列表检查所有 url。
2021-04-08 13:05:12
这并不能解决跨站点脚本漏洞问题。对外部网站使用 Javascript 绝对没有任何事情是我无法在服务器端做的。所有这些都会阻碍浏览器本身,并通过引入额外的步骤来降低 Web 应用程序的用处。如果您通过 ajax 加载、重写链接并回发,您仍然可以完成所有这些工作。如果这不起作用,请通过 php 或任何语言远程 rpc 它。荒谬的是,这甚至是普通编码员的问题。
2021-04-12 13:05:12

我发现使用 XFBML 版本的 Facebook 点赞按钮而不是 HTML5 版本解决了这个问题。在您希望按钮出现的位置添加以下代码:

<div id="fb-root"></div>
<script>(function (d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<fb:like send="true" layout="button_count" width="50" show_faces="false" font="arial"></fb:like>

然后将其添加到您的 HTML 标签中:

 xmlns:fb="http://ogp.me/ns/fb#"
Facebook与这个问题有什么关系?
2021-03-15 13:05:12
因为您在 facebook 上也遇到了这个错误,比如按钮,我在搜索答案时发现了这个页面,所以我认为其他人可能需要答案。
2021-03-24 13:05:12