小编Kad*_*ath的帖子

一个"安全的地方"来评估Javascript中的可信代码(具有特定的上下文)?[编辑:你怎么打破它?]

不要在标题上评判我,我知道eval是邪恶的,但我有理由这样做,而且会非常有限.事情是这样的:我想创建一个安全的空间,我可以运行特定的(和可信的)代码,并检索结果(如果它符合我的预期).出于安全原因,我想将其从所有其他范围中删除(这个空间被要求提供结果,并且不应该自己将任何内容导出到周围的范围).

我找到了一个似乎有效的解决方案,也可以为执行添加上下文,但我不确定它是否有效,或者是否存在此系统中的安全漏洞.你能告诉我它是否有问题吗?

它实际上创建了与全局变量同名的本地变量,以防止访问它们.它还剥离了功能(我将添加功能以保留我想要保留的功能).该函数被声明为最接近全局变量,以避免可见性更高的局部范围(计划删除这些特定局部变量的参数).

function contextNoScope(root, context) {
    //I had to pass window as parameter for it to work properly
    for(var key in root){
        if(key != '0' && key != 'window'){
            eval('var ' + key + '=undefined;');
        }
    }
    var window = undefined;
    var root = undefined; //root has to be forbidden too
    return function() {
        this.eval = function(str){ return eval(str); };
        return this;
    }.call(context);
}
Run Code Online (Sandbox Code Playgroud)

用法:

(function(root){
    function contextNoScope(root, context) {
        //...same as previous
    }
    var context = { x: …
Run Code Online (Sandbox Code Playgroud)

javascript scope eval

7
推荐指数
1
解决办法
216
查看次数

标签 统计

eval ×1

javascript ×1

scope ×1