javascript - JS eval 安全问题

标签 javascript

每个人都说 JS 中的 eval() 函数很糟糕。

实际上我是这样使用的:

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

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

您能确认一下吗? (我不想让我的应用程序出现漏洞)。

最佳答案

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

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

只是不必要地使用了eval,它相当于

document.getElementById('toto').value;

现在,没有引号:

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

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

假设这就是你的意思:

执行某人在输入中键入的代码似乎有点奇怪,但只要您满足三件事,那就没问题。这三件事是:

  1. eval 将执行该输入中的任何代码。既然用户把它放在那里,那么可能性就很大了(至少是“用户小心”的情况)。

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

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

eval 是邪恶的”口头禅与不必要地使用 eval 相关,正如人们有时所做的那样(您会看到 eval("obj."+ nameOfProperty) 例如),并将其用于您无法控制的内容。

关于javascript - JS eval 安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701988/

相关文章:

javascript - 在 Javascript/Ajax 中使用 PHP 变量而不在检查元素中显示

javascript - socket.io 中的关闭超时和心跳间隔有什么区别

javascript - 有没有一种方法可以让滚动的 div 触发另一个 div 使用 jQuery 进行滚动?

javascript - JS/jQuery : Popupbox with options

javascript - 如何在 ts 而不是 HTML 中使用管道

javascript - 部分选择文本字段内的文本

javascript - Google GEOchart,如何删除 map 键

javascript - Angular 4 - 即使在手动安装 portfinder 后,我仍然无法找到模块 'portfinder'

javascript - 如何将 Excel 文件导入 Web 应用程序 (javascript/d3/html)

javascript - Gatsby :为什么我(或者我什至?)需要使用exports.onCreateNode 来创建页面?