Language agnostic 什么时候应该使用eval(获取字符串并在运行时将其作为代码执行)?

Language agnostic 什么时候应该使用eval(获取字符串并在运行时将其作为代码执行)?,language-agnostic,eval,Language Agnostic,Eval,我经常听到这样的观点(在javascript中,但许多语言都有类似eval的特性),即使用eval是“不好的”。这些观点是,您认为使用eval的大多数事情都可以通过其他方式完成,事实上,eval在大多数情况下非常慢,并且它可以允许用户输入要执行的代码(如果没有采取适当的预防措施的话)。我们知道,大多数功能不仅仅是天生的“坏”,而是让人们关注eval eval的一些有效用途是什么?(除了为调试应用程序的开发人员提供一个很好的功能外)通常使用eval实现eval。eval的陷阱与SQL注入的陷阱相同

我经常听到这样的观点(在javascript中,但许多语言都有类似eval的特性),即使用eval是“不好的”。这些观点是,您认为使用eval的大多数事情都可以通过其他方式完成,事实上,eval在大多数情况下非常慢,并且它可以允许用户输入要执行的代码(如果没有采取适当的预防措施的话)。我们知道,大多数功能不仅仅是天生的“坏”,而是让人们关注eval


eval的一些有效用途是什么?(除了为调试应用程序的开发人员提供一个很好的功能外)

通常使用eval实现eval。

eval的陷阱与SQL注入的陷阱相同。如果您在代码中动态构造字符串并调用eval,那么很好。但是如果您的代码盲目地将用户输入连接到字符串中进行eval,那么您就是在请求它。在许多情况下,eval可能很有用,但人们倾向于避免它,因为有其他方法可以解决评估的需要。

从可靠的来源解码json。像在图形计算器中一样评估用户输入的表达式。除此之外,我想不出太多,尽管它在90年代后期被不想学习的人滥用了很多e访问页面元素的正确方法。

eval()有优点也有缺点。在任何支持eval的语言中,eval最糟糕的一面是它为安全漏洞敞开了大门。如果开发人员能够找出如何将他写入应用程序中eval语句的任何自定义代码获取到应用程序中,那么他可能有能力做各种邪恶的事情,如窃取私有数据或破坏您的应用程序提供的服务。性能是您已经表示过的另一个问题


Eval在您的代码可能需要动态生成其他代码以轻松执行复杂任务的领域非常出色。我现在想不出一个例子,但您需要这样做的任何情况都可能不会是微不足道的。我建议仅在绝对必要时才这样做,以最大限度地降低我在pr中提出的观点的风险如果可能的话,千万不要相信用户输入是安全的,可以使用eval。

我曾经写过一个perl CGI脚本,它的输出是perl代码,由另一台机器上的另一个脚本和eval()检索“d.它之所以安全,是因为我控制了两端,但它确实解决了一个问题,否则,在XML还未广为人知的时代,我就需要发明某种序列化格式。

这很容易。如果你想以某种方式分析程序(即为了调试或分析目的),那就太好了。”.

eval的唯一合法用途是执行您无法控制的代码(除非您正在编写一个.

您可以不使用eval来解码JSON。只有在json2.js使用eval的情况下才是如此。您应该始终引用您链接到的页面中最相关的部分,让读者知道您在谈论什么。请参阅。