使用PHP eval合成动态类时有哪些风险?

时间:2014-04-17 10:20:29

标签: php eval

我正在阅读:When (if ever) is eval NOT evil?和其他一些网上指南何时使用eval,何时不使用eval。这些帖子都没有真正回答我关于运行时动态类合成的安全问题的问题。

背景:由于我们不能使用PHP 5.4特性在类中正确混合,我们需要另一种解决方案来获得动态混合。所以我们在Github上找到了这个特殊的类:https://github.com/wellspringworldwide/PHP-ClassMixer/blob/master/ClassMixer.php它正是我们想要的。

对于潜在的安全风险,我不是真正的专家来评估此类代码,但也许Stackoverflow上的某些人知道这些方法的风险是什么。

据我所知,这种使用eval进行类组合的方法的安全性基础仅在

时给出。
  1. 要混合到另一个类中的类可以从外部访问和修改,例如文件或RPC访问
  2. 用户可以访问正在运行的上下文,即周围的代码加载插件代码
  3. 用户可以访问应用程序工作内存并更改数据。
  4. 我们的申请中没有提供这些情况,但我不确定在使用eval时我们还需要考虑其他条件!?

    谢谢。

1 个答案:

答案 0 :(得分:1)

Eval基本上是坏的,因为它是eval():D

不认真:

你永远不应该组成一些来源并把它扔进eval。一旦构成源的脚本具有任何依赖数据源(如数据库后端),文件系统读取(尤其是文本)文件或(甚至更糟)某些表单数据,那么总是存在侵入性和破坏性代码的可能性注射。 (例如;exec('rm -rf /');

使用装饰器模式可能会帮助你。 请阅读thisthat作为了解装饰器模式的入门知识。