PHP:当只允许使用字母数字字符和运算符时,eval函数是否足够安全



我正在考虑使用函数'eval'来评估用户生成的数学表达式。

然而,我被卡住了。我知道如果我只允许数字和运算符(例如加号、减号等(,eval是安全的。然而,我想让用户输入sin(x(或cos(x(等函数,因此我需要允许解析器允许字母进入。

它安全吗?

用户是否可以只输入字母数字字符和字符{+、-、*、/}(括号不包括在内(的恶意代码?

谢谢。

它安全吗?

很难说需要查看实现,这不是问题的一部分。

所以在这一点上,一切皆有可能。可以是安全的,可以是不安全的,可能是一团糟,也可能是金色的。

用户是否可以只输入字母数字字符和字符{+、-、*、/}(括号不包括在内(的恶意代码?

类似地,这取决于许多不同的事情,可能首先是你认为的恶意代码。能够触发错误的代码?

它也可能取决于PHP版本。一些较旧的PHP版本允许使用未定义的常量,这些常量会自动转换为字符串。

由于数字是允许的,一个允许的字符可能是.(点(,它也是PHP中的字符串串联运算符,可能会导致您可能认为是恶意的副作用。

查看差异:https://3v4l.org/Jkmj0


在您的具体情况下,为什么不审查是否已经建议https://github.com/madorin/matex符合你的要求吗?

它可能使最初的";是eval安全的";这一次的问题无关紧要,因为你把eval从方程中去掉了。

最新更新