未捕获的安全错误:无法从“HTMLIFrameElement”读取“contentDocument”属性

4
我正在尝试为特定需求制作自己的“网站检查器”,但在访问iFrame时遇到了问题。

未捕获的SecurityError:无法从'HTMLIFrameElement'中读取'contentDocument'属性, 来自"http://checker.xcore.co.il"的框架阻止了来自"http://xcore.co.il"的框架的访问。请求访问的框架将"document.domain"设置为"checker.xcore.co.il",但被访问的框架没有这样做。两者都必须将"document.domain"设置为相同的值才能允许访问。

我必须使用iFrame来访问CSS类。 点击此链接,加载网站,然后单击右侧的“fontSizeErrors”,然后您可以在控制台日志中看到错误。
请问我该如何解决这个问题? 我在Google上找不到任何有用的信息。
谢谢!

它被称为HTML同源策略。https://en.wikipedia.org/wiki/Same_origin_policy。即使是http://a.example.com也由于安全原因无法访问来自http://b.example.com的数据。 - cforcloud
除非您可以访问两个域并且可以设置 document.domain 以匹配两个域,否则您无法绕过它。 - charlietfl
1
通过Tampermonkey或Greasemonkey在实际页面上运行您的脚本,而不是通过iframe在自己的页面上运行。 - dandavis
人们如何制作网站检查器,例如http://wave.webaim.org/?我肯定有一种方法可以提取每个类的CSS。 - Nate
1个回答

6
这是所有浏览器都使用的正常安全措施。您无法访问具有不同来源的元素或框架,否则这将是一个巨大的安全漏洞。因此,浏览器会阻止尝试执行此类操作的所有脚本。为了在框架内执行任何操作,其内容必须具有相同的来源。
如需进一步了解,请查看我的答案

人们如何制作网站检查器,例如http://wave.webaim.org/?我一定可以提取每个类的CSS。 - Nate
@user3298188 我猜他们只是进行一些XMLHttpRequest并检查内容,但我不知道背后的逻辑,抱歉。 - Marco Bonelli
一旦您拥有能够将URL页面解析为字符串的编程语言,您可以做任何您想要的“魔法”;) - Srneczek
这怎么可能成为一个安全漏洞呢?我在浏览器中加载的 DOM,我应该能够以任何我想要的方式处理它... - Dalibor
1
@Dalibor 不,你不应该这样做。如果这是可能的话,那么任何人都可以修改和注入不同站点框架内的脚本,做任何他们想做的事情。这将是一个巨大的安全漏洞。举个愚蠢的例子,想象一下一个恶意网站加载了一个隐藏的iframe,其中包含你银行的网页:你已经登录了,因为你经常使用它,而恶意网站将能够访问你的所有数据。这将非常非常危险。 - Marco Bonelli
2
你说得对。在我发布回复的那一刻,我就想到了那些网络钓鱼的例子。谢谢你。然而,在 Cordova/Ionic 应用程序中实现远程 iframe 时,这个问题让我的工作变得十分复杂... - Dalibor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接