JS eval安全问题

时间:2013-03-29 11:04:48

标签: javascript

每个人都告诉JS中的eval()函数是BAD。

其实我这样用它:

eval("document.getElementById('toto').value");

在我看来,即使用户在“toto”元素中发送恶意输入,这也是安全的。

你能确认一下吗? (我不想让我的应用程序中存在漏洞。)

1 个答案:

答案 0 :(得分:2)

首先,正如Juhana在评论中指出的那样:

eval("document.getElementById('toto').value");

只是对eval的不必要使用,它等同于

document.getElementById('toto').value;

现在,没有引号:

eval(document.getElementById('toto').value);

...它将使用input“toto”评估id中的任何代码。

假设这就是你的意思:

执行某人在input中键入的代码似乎有点奇怪,但只要你对三件事情没事,那就没问题了。这三件事是:

  1. eval将执行该输入中的任何代码。由于用户把它放在那里,几率非常好(至少是“用户提防”的情况)。

  2. eval启动完整的JavaScript解析器。现在,在现代浏览器上发生的事情比眨眼更快,所以......

  3. eval将在您调用它的上下文中执行您提供的代码,这使它甚至可以访问该上下文中的 local 变量。

  4. eval是邪恶的”咒语与不必要地使用eval有关,就像人们有时做的那样(例如,你看到eval("obj." + nameOfProperty)),并在你无法控制的内容上使用它