每个人都告诉JS中的eval()函数是BAD。
其实我这样用它:
eval("document.getElementById('toto').value");
在我看来,即使用户在“toto”元素中发送恶意输入,这也是安全的。
你能确认一下吗? (我不想让我的应用程序中存在漏洞。)
答案 0 :(得分:2)
首先,正如Juhana在评论中指出的那样:
eval("document.getElementById('toto').value");
只是对eval
的不必要使用,它等同于
document.getElementById('toto').value;
现在,没有引号:
eval(document.getElementById('toto').value);
...它将使用input
“toto”评估id
中的任何代码。
假设这就是你的意思:
执行某人在input
中键入的代码似乎有点奇怪,但只要你对三件事情没事,那就没问题了。这三件事是:
eval
将执行该输入中的任何代码。由于用户把它放在那里,几率非常好(至少是“用户提防”的情况)。
eval
启动完整的JavaScript解析器。现在,在现代浏览器上发生的事情比眨眼更快,所以......
eval
将在您调用它的上下文中执行您提供的代码,这使它甚至可以访问该上下文中的 local 变量。
“eval
是邪恶的”咒语与不必要地使用eval
有关,就像人们有时做的那样(例如,你看到eval("obj." + nameOfProperty)
),并在你无法控制的内容上使用它