1

i would like to know if there is a way for me to use this code, and call a function with params, i know i can call no-params functions.

Something like:

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

Using this code i cannot change:

call_user_func($_GET['f']); 

Thanks in advance!

EDIT: I know its dangerous. its for some PoC only, nothing in production. EDIT: As I said, i cannot change the code, i just can call file.php?f=

4

3 回答 3

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);
于 2013-07-28T00:29:10.413 回答
1

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

第二:

$data=explode(" ",$_GET['f']);
$parameters=array_slice($data,1)
call_user_func_array($data[0],$parameters);
于 2013-07-28T00:27:19.263 回答
0

您将使用?f=function&a[]=arg1&a[]=arg2与此 PHP 类似的 url:

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

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

于 2013-07-28T00:27:57.733 回答