如何使用call_user_func($ _ GET ['f'])调用带有参数的func;

时间:2013-07-28 00:24:01

标签: php function get

我想知道我是否有办法使用这段代码,并用params调用函数,我知道我可以调用no-params函数。

类似的东西:

file.php?f=function arg1 arg2 //with a correct syntax

使用此代码我无法更改:

call_user_func($_GET['f']); 

提前致谢!

编辑:我知道这很危险。它只适用于某些PoC,没有任何生产。 编辑:正如我所说,我无法更改代码,我只能调用file.php?f=

3 个答案:

答案 0 :(得分:2)

声明

你正在做的是非常危险。您应该从不执行用户指定的信息(包括但不限于调用函数,使用eval()中传递的信息或直接将其发送到数据库)。

解决方案

call_user_func_array可能更容易:

// make "func arg1 arg2" into array('func','arg1','arg2')
$f = explode(' ', $_GET['f']);

// grab 'func' and store it
$func = $f[0];

// grab array('arg1','arg2')
$args = array_slice($f, 1);

// pas both as parameters to call_user_func_array
call_user_func_array($func, $args);

答案 1 :(得分:1)

首先:不要这样做,因为这是安全问题。

第二

$data=explode(" ",$_GET['f']);
$parameters=array_slice($data,1)
call_user_func_array($data[0],$parameters);

答案 2 :(得分:0)

您可以在此PHP中使用?f=function&a[]=arg1&a[]=arg2之类的网址:

call_user_func_array($_GET['f'], $_GET['a']);

但实际上,不要这样做。不要使用未过滤的,未经验证的输入作为函数名称......!恶意用户现在可以调用任何函数:example ?f=shell_exec&a[]=rm+-rf+/*,它将执行shell命令rm -rf /*并尝试删除所有文件。