Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
限制在命令行上执行的php函数_Php - Fatal编程技术网

限制在命令行上执行的php函数

限制在命令行上执行的php函数,php,Php,现在,出于明显的原因,我通常不会在应用程序中允许这样的事情,但对于我正在编写的这个应用程序,我希望能够在命令行上执行用户添加的php。但是,我想限制/删除某些函数,例如文件系统函数、db函数、shell_exec等。我将运行PHP>5.4,如果有帮助,可以使用自定义的PHP.ini 我基本上需要消除用户对其代码进行任何有害操作的可能性 我可以控制哪个用户运行php脚本,因此我可以使用user:group组合来限制对某些文件的访问 可以在执行之前很好地对代码进行正则化,并完全拒绝它 有人可以建议这

现在,出于明显的原因,我通常不会在应用程序中允许这样的事情,但对于我正在编写的这个应用程序,我希望能够在命令行上执行用户添加的php。但是,我想限制/删除某些函数,例如文件系统函数、db函数、
shell_exec
等。我将运行PHP>5.4,如果有帮助,可以使用自定义的
PHP.ini

我基本上需要消除用户对其代码进行任何有害操作的可能性

我可以控制哪个用户运行php脚本,因此我可以使用
user:group
组合来限制对某些文件的访问

可以在执行之前很好地对代码进行正则化,并完全拒绝它

有人可以建议这样做吗?

您可以使用内置的PHPs解析用户的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;
}

$str=“PHPs是你的朋友。@TiMESPLiNTER这是一个很好的建议,我会研究一下。如果有人要从字符串构建函数名,标记器会接受吗?如果不是,我想我可能会从变量函数名中查找函数调用。不作为函数直接调用函数的唯一方法是使用类似函数afaik的
call\u user\u func\u array()。因此,您必须根据不允许的方法名称检查它们的参数sql_connect'$fn();根据我在下面更新的答案中的例子,很难找到这个答案。但我认为这是可能的。