题
我有一个.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/">
的请求重定向到正确的位置。
这只是一个想法......
问候。