vanderlee/expression

基于eval()的安全简单可扩展表达式解析器

1.0.2 2024-04-24 09:32 UTC

This package is auto-updated.

Last update: 2024-09-24 10:35:38 UTC


README

版本 1.0.2 Build Status

简单快速PHP表达式解析器,基于eval()的安全使用。

与PHP 7.1及以上版本兼容。

使用eval()是邪恶的

此类尝试通过显式允许良好功能,而不是删除不良功能,来暴露PHP功能子集。

如果您发现任何(潜在的)安全问题,请报告!

由于PHP-Expression使用eval(),它可以处理PHP语法,包括括号、算术、函数等。

允许执行的操作

  • 使用数字,包括浮点数或整数,包括负数。
  • 使用多种不同的基数,例如十进制、八进制、十六进制。
  • 使用大多数基本数学函数,如abs()min()max()sqrt()
  • 使用基本算术运算符+-*/%
  • 使用括号。
  • 使用比较(true/false返回1/0十进制)。
  • 在比较中使用布尔运算符。
  • 使用位运算符。
  • 使用文本布尔运算符如andxoror

我们添加的功能

  • 使用二进制数字,使用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类无法也不能保护您。检查有效范围。