使用eval()执行用户提供的代码的问题

Issues with using eval() to execute user-supplied code?

本文关键字:代码 问题 用户 eval 执行 使用      更新时间:2023-09-26

我有一个计算器小部件(jsfiddle),它使用javascript的eval()函数来评估用户的输入以作为计算器工作。这是一个嵌入在chrome扩展的小部件,所以它没有任何数据库或任何其他附加的东西,可能会受到伤害,它不发送或接收任何数据。

显然,因为它使用了javascript的eval函数,任何javascript都可以被这个框执行。这有什么风险吗?我对javascript相当陌生,所以我不确定用户能够在这个小部件内评估自己的javascript会产生什么结果。他们所做的一切难道不会在刷新后恢复吗?

JavaScript运行在客户端,所以你的服务器没有任何迫在眉睫的危险。

但是如果用户可以以某种方式保存他们的输入并给其他用户一个链接,这可能是一个问题,因为这将允许执行任意JavaScript(即:跨站点脚本又名XSS)

除了"eval是邪恶的"answers"代码质量"之外…

…安全问题并不是关于允许用户提供代码:如果用户愿意,他们可以删除自己拥有的每个文件。不推荐,但完全有可能。

JavaScript的危险,无论是eval()还是其他,都是允许攻击者以用户的名义(未经同意)在所述用户(因此浏览器/域)的上下文中运行代码。

这被称为XSS:跨站点脚本:

跨站点脚本漏洞是web应用程序的漏洞,允许攻击者绕过客户端安全…通过寻找向web页面注入恶意脚本的方法[可能涉及也可能不涉及eval],攻击者可以获得对敏感页面内容、会话cookie和浏览器代表用户维护的各种其他信息的提升访问权限。因此,跨站点脚本攻击是代码注入的一种特殊情况。

快乐编码。

参见:"eval is evil" from Efficient JavaScript code:

'eval'方法和相关的结构,如'new Function',是非常浪费的。它们有效地要求浏览器创建一个全新的脚本环境(就像创建一个新的网页一样),从当前作用域导入所有变量,执行脚本,收集垃圾,并将变量导出回原始环境。此外,代码不能缓存用于优化目的。如果可能的话,应该尽量避免Eval及其相关函数。