【发布时间】:2017-05-16 09:24:25
【问题描述】:
我正在尝试在“隔离”上下文中运行 trusted JS 代码。 基本上想出了这个方法:
function limitedEval(src, context) {
return (function() {
with(this) {
return eval(src)
}
}).call(context)
}
这很好用,但是当脚本使用 var 关键字时,它存储在 执行上下文 中,而不是 with 语句中提供的上下文(我理解这是设计使然) .因此,例如,以下代码不起作用:
var ctx = {};
limitedEval('var foo = "hello"', ctx);
limitedEval('alert(foo)', ctx); // error: foo is undefined
我希望能够多次调用limitedEval() 并重用上下文。这可能吗?
【问题讨论】:
-
"Trusted" 和
eval()从不属于同一个讨论。 -
你能详细说明吗?
-
他的意思是 eval 不是一个安全的函数,会引入多个安全问题。你应该研究类似github.com/ternjs/acorn
-
@ScottMarcus 他们属于完全相同的讨论——使用
eval要求执行的代码是可信的。 -
您可能对this solution^H^H^H^H^H hack感兴趣
标签: javascript