繁体   English   中英

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

[英]Restricting php functions executed on the command line

现在通常,出于显而易见的原因,我通常永远不会在应用程序中允许此类操作,但是对于我正在编写的该应用程序,我希望能够在命令行上执行用户添加的php。 但是,我想限制/删除某些功能,例如文件系统功能,数据库功能, shell_exec等。我将运行PHP> 5.4,并且如果有帮助,可以使用自定义php.ini

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

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

在执行之前可以很好地对其代码进行正则表达式,然后完全拒绝它。

谁能建议这样做的选择?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM