JS eval()函数只解释变量

时间:2014-06-13 11:52:08

标签: javascript eval

我使用eval来解释一些变量输入。

可能的输入是

"somevar"

"someobj.someprop['somekey'].someprop"

"window.someprop"

但是我不希望它'执行' 任何操作。就像调用任何函数一样,更改任何值的任何值,声明任何变量。

所以不应该接受这些(以及任何改变任何状态的东西):

alert()
var somewar = 0
mywar = somewar

是否可以通过原生js?

我的目标只是解释复杂的输入变量"地址"并将其归还。

1 个答案:

答案 0 :(得分:3)

对于这样的事情,你可能更好地解析价值。

var steps = input.match(/\['(?:[^']|\\.)+'\]|\["(?:[^"]|\\.)+"\]|[a-zA-Z0-9_]+/g);
var src = window;
var step;
while(step = steps.shift()) {
    if( step.charAt(0)) {
        // ['...'] or ["..."]
        step = step.substring(2,step.length-2);
    }
    src = src[step];
}
alert(src);

由于您正在解析字符串,因此无法执行恶意代码。