答案 0 :(得分:16)
答案 1 :(得分:5)
一种方法可以使用匿名函数封装所有需要保护的代码,并使用类似对象传递所有环境参数,但修改为不允许全局DOM操作,最简单的示例
(function(document,JQuery,$,window){ //make sure all global access methods are here
//eval code here or just copy and paste
})(modifiedDocument,modifiedJQuery,modifiedJQuery,modifiedWindow);
现在问题可能会出现在我们心中,我们如何修改文档对象?一个方法可能
var modifiedDocument = function(){
this.getElementById = function(id){ //one of global accessing functions
//check if given id is withing the restriction div
return document.getElementById(id);
//if found element is not withing restriction div just return null or what is default
return null;
}
}
自调用匿名函数允许我们防止全局变量冲突,并且它被用在许多知名的库中,如jQuery。
为了能够应用此方法,首先必须确定每种可能的方式,脚本如何尝试读取或写入全局DOM对象。我不能给你完整的解决方案,因为使用这种方法显然是一个项目可能会消耗我整个星期,但这可能会照亮你的方式!
答案 2 :(得分:0)
答案 3 :(得分:0)
答案 4 :(得分:0)
理论上可以(甚至可能实际上可能)将JS执行环境控制到可以沙箱化脚本的程度。但是,这样做非常非常复杂。这是一项艰苦的工作,建议在任何情况下使用IFRAME。
如果IFRAME因某种原因确实无法解决问题,你可以尝试查看Caja项目:
http://code.google.com/p/google-caja/
我自己没有使用过Caja,但听起来它可能会满足您的需求。您可能不得不支付一些严重的复杂性成本。 IFRAME基本上是Web架构对您的用例的回答,而大多数其他解决方案将类似复杂而复杂的黑客攻击。
答案 5 :(得分:0)
很久以前就已经问了这个问题,但我最近偶然发现它,因为我有类似的情况,我需要嵌入第三方内容,包括javascript。
我遇到了一个名为caja(https://developers.google.com/caja/)的Google项目,用他们自己的话来说:
是一款可以安全地嵌入您网站的第三方HTML,CSS和JavaScript工具。它支持嵌入页面和嵌入式应用程序之间的丰富交互。 Caja使用对象功能安全模型来实现各种灵活的安全策略,以便您的网站可以有效地控制嵌入式第三方代码可以对用户数据执行的操作。
我还没有使用它,但计划尽快尝试。