Я пишу веб-приложение, которое я хочу быть «scriptable» - это означает, что я хочу, чтобы пользователи могли писать небольшие фрагменты кода для добавления дополнительных функций.PHP eval и зависимость инъекции
Сценарий, который должен быть запущен, просто возвращает логическое значение, указывая, было ли выполнено условие, однако логика зависит от опроса объектов в основном блоке, поэтому мне нужен способ ввода среды, в которой находится eval
вызываемый - в интерпретируемый сценарий.
Надевание вопросов безопасности в сторону на мгновение, это то, что я хочу сделать.
/* script pseudo code */
if object1.date() - today() < SOME_CONSTANT
return true;
else
if object2.field1 == 123 && oject1.date() > object2.field2
return true;
else
return false;
/* Main block of code */
$obj1 = New path\to\Object1();
$obj2 = New Path\To\Object2();
$result = eval($script);
if $result
doSomething();
Мои вопросы тогда:
Как вводить среду в строку, которая должна быть Эвальд, чтобы я мог получить доступ к объекту в выражении оценивается?
Вы можете использовать оператор 'global', чтобы добавить все объекты, которые они могут допросить, в локальную область. – Barmar
@ Бармар: Не могли бы вы рассказать небольшим фрагментом ?. Я больше из C/C++/Python. –
Я не уверен, что понимаю проблему, к чему у вас проблемы с доступом? Кажется, что все доступно/создана среда: http://codepad.viper-7.com/p5kmZF – jeroen