我正在考虑使用函数'eval'来评估用户生成的数学表达式。
然而,我被卡住了。我知道如果我只允许数字和运算符(例如加号、减号等(,eval是安全的。然而,我想让用户输入sin(x(或cos(x(等函数,因此我需要允许解析器允许字母进入。
它安全吗?
用户是否可以只输入字母数字字符和字符{+、-、*、/}(括号不包括在内(的恶意代码?
谢谢。
它安全吗?
很难说需要查看实现,这不是问题的一部分。
所以在这一点上,一切皆有可能。可以是安全的,可以是不安全的,可能是一团糟,也可能是金色的。
用户是否可以只输入字母数字字符和字符{+、-、*、/}(括号不包括在内(的恶意代码?
类似地,这取决于许多不同的事情,可能首先是你认为的恶意代码。能够触发错误的代码?
它也可能取决于PHP版本。一些较旧的PHP版本允许使用未定义的常量,这些常量会自动转换为字符串。
由于数字是允许的,一个允许的字符可能是.
(点(,它也是PHP中的字符串串联运算符,可能会导致您可能认为是恶意的副作用。
查看差异:https://3v4l.org/Jkmj0
在您的具体情况下,为什么不审查是否已经建议https://github.com/madorin/matex符合你的要求吗?
它可能使最初的";是eval安全的";这一次的问题无关紧要,因为你把eval
从方程中去掉了。