1

このコードを使用してパラメーターを指定して関数を呼び出す方法があるかどうかを知りたいのですが、パラメーターなしの関数を呼び出すことができることを知っています。

何かのようなもの:

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

このコードを使用すると、変更できません:

call_user_func($_GET['f']); 

前もって感謝します!

編集:私はそれが危険であることを知っています。一部の PoC のみで、本番環境では何もありません。編集:私が言ったように、私はコードを変更することはできません。私はただ呼び出すことができます 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

最初に: これはセキュリティ上の問題であるため、実行しないでください。

2番目:

$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+/*、シェル コマンドを実行し、rm -rf /*すべてのファイルを削除しようとします。

于 2013-07-28T00:27:57.733 に答える