JS eval()函数只解释变量

JS eval() function to interpret variables only

本文关键字:解释 变量 函数 eval JS      更新时间:2023-09-26

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

可能的输入

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

等。

但是我不希望它'执行'任何动作。比如调用任何函数,改变任何值,声明任何变量。

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

alert()
var somewar = 0
mywar = somewar

是否可以通过本机js?

我的目标只是解释复杂的输入变量"address"并返回它

对于这样的内容,您最好解析该值。

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);

由于您正在解析字符串,因此没有机会执行恶意代码。