现在通常情况下,我绝不会在应用程序中允许这样的事情,但是对于我正在编写的这个应用程序,我希望能够在命令行上执行用户添加的php。但是,我想限制/删除某些功能,例如文件系统函数,数据库函数,shell_exec
等。我将运行PHP> 5.4,如果有帮助,可以使用自定义php.ini
。
我基本上需要消除用户对其代码执行任何有害操作的可能性。
我可以控制哪个用户运行php脚本,因此我可以使用user:group
组合来限制对某些文件的访问。
在执行之前可以正确编写代码并完全拒绝它。
有人可以建议这样做吗?
答案 0 :(得分:2)
您可以使用内置Tokenizer的PHP来解析用户的PHP脚本,并检查不允许的方法调用。
一个简短的示例脚本,可以让您了解我在谈论的内容:
$str = "<?php
\$fp = fopen('test.txt', 'wb');
call_user_func_array('fopen', array('test.txt', 'wb'));
\$file = new File;
\$fn = 'my' . 'sql_connect';
\$fn();
echo 'hello world';";
$tokenizedPhp = token_get_all($str);
$i = -1;
foreach($tokenizedPhp as $token) {
++$i;
if(is_array($token) === false) {
echo $i , ': punctuation -> ' , $token , PHP_EOL;
continue;
}
echo $i , ': ' , token_name($token[0]) , ' -> ' , $token[1] , PHP_EOL;
if($token[0] === T_STRING && function_exists($token[1]))
echo '<b>function call/class instanciation: ' , $token[1] , '</b>' , PHP_EOL;
}