【发布时间】:2011-07-20 05:01:17
【问题描述】:
我有一个页面包含框架内同一域中的另一个页面。是否可以防止框架页面中的脚本可以操作首页 DOM(例如添加元素或脚本)?
【问题讨论】:
标签: javascript dom iframe same-origin-policy
我有一个页面包含框架内同一域中的另一个页面。是否可以防止框架页面中的脚本可以操作首页 DOM(例如添加元素或脚本)?
【问题讨论】:
标签: javascript dom iframe same-origin-policy
您可以尝试摆脱“危险”函数,但保存对它们的匿名引用,例如......
(function(){
var hiddenrefs = {};
hiddenrefs.dGetElementById = document.getElementById;
document.getElementById = null;
})();
等等。然而,这将是一项非常乏味的工作,而且无论如何都注定要失败。如果这是试图让用户在 iframe 内的受控环境中运行 Javascript,那么这是一种被误导的安全形式。 iframe 可以发出top.location = "http://www.myevilpage.com",在这种情况下,无论如何它对你来说已经结束了。 (即使使用不同的域也是如此。iframe 仍然可以重定向用户和各种讨厌的东西,即使严格来说它无法访问父级的 DOM。)如果不过滤,让用户运行 JS 代码永远不会安全恶意代码的源代码,即使过滤它也是相当不安全的,因为它很容易绕过过滤。许多人尝试过,许多人失败了。我建议永远不要让用户运行 Javascript。
【讨论】:
最好的解决方案可能是在 iframe 上使用 HTML5 沙盒属性,它(默认情况下)显式禁用脚本和对父 DOM 的同源访问。
【讨论】: