什么时候(如果有的话)是eval not evil?

2022-08-30 15:57:25

我听说很多地方PHP的eval函数通常不是答案。鉴于 PHP 5.3 的 LSB闭包,我们没有理由依赖 或 .evalcreate_function

在 PHP 5.3 中,是否有任何可以想象的 eval 是最佳(唯一?)答案的情况?

这个问题不是关于eval是否一般是邪恶的,因为它显然不是。

答案摘要:

  • 计算数值表达式(或 PHP 的其他“安全”子集)
  • 单元测试
  • 交互式 PHP“shell”
  • 可信的反序列化var_export
  • 一些模板语言
  • 为管理员和/或黑客创建后门
  • 与< PHP 5.3 兼容
  • 检查语法(可能不安全)

答案 1

如果您正在编写恶意软件,并且想让试图在您之后进行清理的系统管理员的生活变得艰难。根据我的经验,这似乎是最常见的用例。


答案 2

埃里克·利珀特(Eric Lippert)总结了三篇博客文章。这是一个非常有趣的阅读。

据我所知,以下是使用eval的一些唯一原因。

例如,当您基于用户输入构建复杂的数学表达式时,或者当您将对象状态序列化为字符串以便可以存储或传输该字符串并在以后重构时。


推荐