У меня есть логические выражения, которые мне нужно оценить. После того, как какой-либо шаблон выражения, параметризованный параметрами, эти выражения могут выглядеть так:
$expr1 = '1 or 0 and not(0 or 0)'; $expr2 = "'editor' == 'editor' and not(0 = 1) and 10 > 5";
Поэтому мне нужно обрабатывать числа, строковые литералы, а также логические и алгебраические операторы и круглые скобки между ними.
При использовании PHP eval я также получаю нежелательные необеспеченные способности, такие как вызов системной функции и т. Д.
Итак, есть ли способ ограничить PHP eval или может быть какое-то лучшее решение?
Благодаря!
Вы можете использовать токенизатор для проверки того, что выражения не содержат вызовов функций.
См. Пример безопасного класса eval () .
Хорошо, у меня есть другое решение. Я понял, что могу использовать PHP DOMXPath :: для оценки моего логического выражения. Итак, у меня есть рабочее решение, которое не имеет проблем с безопасностью. Я думаю, что моя проблема решена 🙂