限制iframe中的脚本只能在同一顶级域的页面中运行?

时间:2010-04-14 18:03:29

标签: javascript iframe xss

我想强制要求页面内的客户端脚本(反过来又加载到另一个页面的iframe中)只有在父页面与框架页面位于同一顶级域时才会运行(虽然它可能在该域中的另一个主机名上)。这可以吗?

我认为由于跨站点脚本限制,查看top.location.host的简单解决方案将无法使用,但我想知道其他javascript hackery是否足够。

对任何潜在解决方案的限制:

我需要能够在子页面内运行XmlHttpRequest次调用,并且我需要验证主机名是否在之前在我进行这些调用之前。 (这使得document.domain解决方案具有挑战性,因为AFAIK设置document.domain会禁用XmlHttpRequest次呼叫。

我可以在父节点或子节点上控制客户端脚本和HTML(如果需要,我可以创建新页面),但我无法进行任何服务器端代码更改。

我无法通过服务器端调用或代理来模拟上述内容,因为子页面的主机名使用带有主机名范围的cookie的表单身份验证系统,我无法从父页面访问,因为它位于不同的主机名。

我对子框架网站没有足够的控制能够将两个网站放在同一个反向代理或负载均衡器之后(这样我就可以将两个网站放在同一个主机名上)。

我实际上并不需要访问IFrame中的任何UI-- iframe是不可见的,我只是用它来在父网页上不同主机名的网站安全上下文中运行javascript。

所以此时我很难过。有什么想法吗?我想确保在放弃之前我不会忽视一个简单的解决方案。

2 个答案:

答案 0 :(得分:1)

  

设置document.domain会禁用进行XmlHttpRequest调用的功能

事实并非如此,我已多次这样做了。如果您控制这两个域,为什么,您可以使用它。

此外,如果您愿意将浏览器限制为FF3 +和IE8 +(是的,您正在思考的那个也是如此),您可以使用postMessage,这是一个非常酷的HTML5功能,可让您从窗口传递消息到窗口。

答案 1 :(得分:0)

这确实需要由浏览器完成。围绕这个问题的努力可以追溯到2007年左右:

所有DOM元素都需要此功能。即,您应该能够指定不应该执行任何DOM元素下的javascript。您还应该能够指定某个DOM元素下的资源请求仅限于某些域等。这些将有助于缓解XSS和CSRF攻击。

无论如何,不​​要屏住呼吸。