PHP eval的限制

时间:2012-12-05 12:48:10

标签: php security eval

我有需要评估的逻辑表达式。在使用参数参数化的一些expresison模板之后,这些表达式可能如下所示:

$expr1 = '1 or 0 and not(0 or 0)';
$expr2 = "'editor' == 'editor' and not(0 = 1) and 10 > 5";

所以,我需要处理数字,字符串文字,逻辑和代数运算符以及它们之间的圆括号。

使用PHP eval时,我也会获得不受欢迎的不安全功能,例如系统函数调用等。

那么,有没有办法限制PHP eval,或者可能有更好的解决方案?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用标记生成器检查表达式是否包含函数调用。

有关示例,请参阅safer eval() class

答案 1 :(得分:0)

好的,我有另一个解决方案。我已经明白我可以使用PHP DOMXPath :: evaluate来评估我的逻辑表达式。所以,我得到了一个没有安全问题的工作解决方案。我认为我的问题已经解决了:)