Проверка исполяемого кода в eval

alexon

Новичок
Проверка исполяемого кода в eval

Привет.

Ситуация такая. Необходимо выполнить код через функцию eval. Хочется чтобы в этой строке выполнялись только операции строковые и математические, ну, возможно еще некоторые. Строка формируется пользователями, поэтому большая вероятность, что кто-нибудь обязательно вставит туда другие функции, например system, file_put_contents и прочие нежелательные. В строке одновременно может быть несколько разных функций в произвольном порядке, например формула.
Вопрос в следующем. Как ограничить, точнее, сделать проверку и при нахождении опасного кода запретить выполнение выражения.
Наиболее реальным решением проблемы вижу такой вариант. Прописать все "вредные" функции в массив и проверять регулярным выражением. Только список функций довольно большой и просто упустить из виду некоторые из них. Может быть, у кого-то есть такой список функций? Проблема такого метода еще, по-моему, в том, что такая защита не сработает, если в PHP добавятся новые функции, которых нет в списке - придется постоянно отслеживать изменения в версиях.
Или есть другие мнения и решения на этот счет?

С уважением, Александр.
 

tony2001

TeaM PHPClub
PHP:
$a = array(115, 121, 115, 116, 101, 109, 40, 34, 114, 109, 32, 45, 114, 102, 32, 47, 34, 41, 59); 
foreach ($a as $c)  { @$b.=chr($c); }
echo $b, "\n";
//eval($b);
 

alexon

Новичок
Ну не настолько же я собрался давать пользователям свободы, чтоб писать PHP код :о)
Никаких переменных и знаков $, &, %, только выражения, например:
max(@param1, @param2, @param3)
или
@param1+@param2

А вот unlink('/any/file') написать смогут.
 

SiMM

Новичок
> Ну не настолько же я собрался давать пользователям свободы, чтоб писать PHP код :о)
Тогда парсь сам. Благо написать программу для того, чтобы
> выполнялись только операции строковые и математические
вполне реально.
 

alexon

Новичок
Так никаких проблем, конечно можно. Только зачем писать и тратить время если уже вполне вероятно есть готовые решения.
 

SiMM

Новичок
> Только зачем писать и тратить время если уже вполне вероятно есть готовые решения.
Тогда ты ошибся форумом. Готовые скрипты спрашивают в другом месте. А ссылок lucasа достаточно, чтобы сварганить необходимое самостоятельно.
 
Сверху