我有一个.jsp,其中包含一个带有一些嵌入式JavaScript的页面的IFrame。这个JavaScript访问父页面中的一些DOM元素(包含IFrame的那个)。

嵌入式页面将位于父页面的单独子域中,我意识到存在一些安全隐患。我的印象是,嵌入在IFrame中的任何页面的document.domain必须与父页面的document.domain匹配才能允许跨IFrame访问。嵌入式页面当前包含以下代码以“扩大”其安全范围:

document.domain ='domain.com'; //其中domain.com是我的域名

然后继续访问父文档中的DOM元素。

我目前正在对此进行测试,并使用以下条目修改了为父页面提供服务的Windows机器上的hosts文件:

127.0.0.1 domain.com

目标是欺骗父页面上的JavaScript,使其相信嵌入页面中的文档是从同一个域提供的。

如果我然后浏览到同一台机器上的页面。尽管通过Firebug观察到我的父页面和嵌入页面中的document.domain显示为“domain.com”,但在尝试从嵌入页面中运行的JavaScript获取或设置DOM属性时,我收到“权限被拒绝”错误。 / p>

我错过了什么吗?提前感谢任何建议或意见!

有帮助吗?

解决方案

即使<!> quot; document.domain <!>属性看起来相同,来自 MSDN文档听起来你仍然需要明确地将它们设置为相同:

  

不同主机上的所有页面都必须   明确拥有域属性   设置为相同的值进行通信   彼此成功。对于   例如,域的值   主机上页面的属性   microsoft.com是<!> quot; microsoft.com <!> quot;通过   默认。如果,那似乎是合乎逻辑的   您设置页面的域属性   在另一个名为的主机上   msdn.microsoft.com到<!> quot; microsoft.com,<!> quot;   这两个页面可以通信   彼此。但事实并非如此   情况,除非你明确设置   页面的域属性   microsoft.com到<!>“microsoft.com。<!>”

其他提示

您可以使用代理将<iframe src="http://domain.com/fake/">的请求重定向到正确的位置。

这只是一个想法......

问候。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top