最核心判断点是调用系统命令的函数是否接收用户可控输入且未做安全处理;需重点排查system、exec、shell_exec、passthru、popen、proc_open、pcntl_exec及反引号等危险函数,追踪参数是否源自$_GET、$_POST等外部输入,并验证过滤是否有效、escapeshellarg()调用位置是否正确。

直接看调用系统命令的函数是否接收了用户可控输入,且未做安全处理。这是最核心的判断点。
重点排查危险函数调用
在代码中搜索以下函数:system、exec、shell_exec、passthru、popen、proc_open、pcntl_exec,以及反引号`。这些是PHP中可执行系统命令的典型入口。
- 逐个检查这些函数的参数来源,尤其是是否来自
$_GET、$_POST、$_REQUEST、$_COOKIE或$_SERVER等外部输入 - 注意函数调用是否嵌套在拼接字符串中,例如
"ping " . $_GET['host'],这种结构极易引入拼接漏洞 - 留意变量是否经过多层赋值后才传入函数,需追踪完整数据流,避免漏掉间接可控点
关注参数过滤是否真正有效
即使代码中有过滤逻辑,也不能默认认为安全。很多过滤只是表面拦截,实际仍可绕过。
- 检查是否仅黑名单式过滤(如只禁用
||、;),而忽略了&、&&、|、$()、${}等其他拼接方式 - 观察是否对空格做了处理——攻击者常用
${IFS}、%09(Tab)、%20或\x20绕过 - 确认是否使用了
escapeshellarg()或escapeshellcmd(),且调用位置正确(必须在拼接到命令前立即使用)
留意被忽略的间接执行路径
有些命令执行并非直接调用函数,而是通过组合逻辑触发。
立即学习“PHP免费学习笔记(深入)”;
- 检查是否用
include、require加载动态文件名,若文件名可控且服务器支持php://filter或data://协议,可能间接导致命令执行 - 关注
eval()、assert()、create_function()等代码执行函数,若其参数拼接了系统命令(如eval("system('".$cmd."')")),也属于命令执行漏洞范畴 - 注意第三方组件或扩展(如图像处理库、PDF生成器)内部是否封装了
exec类调用,且未校验传入参数
结合运行环境验证线索
静态分析之外,还需考虑实际部署情况是否放大风险。
- 查看
php.ini中disable_functions是否禁用了危险函数;若未禁用,且代码存在可控调用,风险即成立 - 确认Web服务运行用户权限(如Linux下是
www-data还是root),权限越高,漏洞危害越大 - 留意是否存在已知高危PHP版本问题,比如近期曝光的CVE-2026-109618/109619,虽属内核RCE,但可能与命令执行链协同利用



















