vanderlee / expression
基于eval()的安全简单可扩展表达式解析器
1.0.2
2024-04-24 09:32 UTC
Requires
- php: >=7.1
Requires (Dev)
- phpunit/phpunit: 9.*
This package is auto-updated.
Last update: 2024-09-24 10:35:38 UTC
README
简单快速PHP表达式解析器,基于eval()的安全使用。
与PHP 7.1及以上版本兼容。
使用eval()是邪恶的
此类尝试通过显式允许良好功能,而不是删除不良功能,来暴露PHP功能子集。
如果您发现任何(潜在的)安全问题,请报告!
由于PHP-Expression使用eval()
,它可以处理PHP语法,包括括号、算术、函数等。
允许执行的操作
- 使用数字,包括浮点数或整数,包括负数。
- 使用多种不同的基数,例如十进制、八进制、十六进制。
- 使用大多数基本数学函数,如
abs()
、min()
、max()
和sqrt()
。 - 使用基本算术运算符
+
、-
、*
、/
和%
。 - 使用括号。
- 使用比较(
true
/false
返回1
/0
十进制)。 - 在比较中使用布尔运算符。
- 使用位运算符。
- 使用文本布尔运算符如
and
、xor
和or
。
我们添加的功能
- 使用二进制数字,使用
0b
前缀。例如:0b1001110
。 - 新函数/函数别名。
- 支持使用前缀使用数字“类型”。
- 布尔运算符
^^
用于逻辑XOR(与xor
相同)。 - 文本布尔运算符
not
(与!
相同)。
不应执行的操作
- 访问未明确允许的函数。
- 访问未明确允许的静态类方法。
- 访问类属性或函数。
- 访问系统常量。
- 访问局部或全局变量。
- 访问Expression类本身。
- 访问命名空间函数。
- 使用任何类型的数组,无论是使用括号还是花括号。
- 使用字符串。
- 返回除数字(整数或浮点数,布尔结果为1/0)之外的内容。
无法执行的操作
- 三元运算符(
x ? y : z
)不受支持。 - Elvis运算符(
x ?: z
)不受支持。 - Null-coalescing运算符(
x ?? z
)不受支持。 - Spaceship运算符(
x <=> y
)仅在PHP 7及以上版本受支持(它是PHP 7的功能)。
可用函数
待办事项
免责声明
尽管此类已由多人测试和独立审查,但我无法做出绝对100%的保证,即它不能被黑客攻击。如果您发现任何潜在的安全问题,请告知我们。
尽管Expression类本身被认为是安全的,但如果您的代码未进行检查,则返回值仍可能被滥用。只能返回数字,但如果您的代码在数字“666”上崩溃,Expression类无法也不能保护您。检查有效范围。