waf通过http请求特征拦截php命令执行攻击,关键在启用rce规则集(如owasp crs的request-932规则),并同步禁用system/exec等高危函数、关闭allow_url_include。

WAF 本身不针对某个 PHP 版本做适配,而是基于 HTTP 请求内容和行为特征进行防护。配置 WAF 拦截 PHP 命令执行类攻击(如 system()、exec()、shell_exec()、passthru()、反引号命令拼接等触发的远程命令执行漏洞),关键在于启用并调优规则集,而非修改 PHP 配置。
确认 WAF 类型与基础部署状态
主流开源 WAF 如 ModSecurity(常配合 Nginx/Apache 使用)或商业 WAF(如 Cloudflare、阿里云 WAF)均可防护此类攻击,但配置逻辑不同:
- 若用 ModSecurity + OWASP CRS:需确保已部署 CRS v4.x(兼容 PHP 8.3 环境),且规则引擎处于检测+拦截模式(
SecRuleEngine On) - 若用 云 WAF:直接在控制台开启“命令执行防护”、“高危函数调用阻断”策略,无需手动写规则
- 本地自建 WAF(如 Nginx + lua-resty-waf):需确认其规则库包含对
system|exec|shell_exec|passthru|proc_open|popen等函数名及常见绕过变体(如大小写混写、URL 编码、空字节、$IFS 替换)的正则匹配
重点启用并验证的防护规则类型
命令执行漏洞的请求特征明显,WAF 主要通过以下几类规则识别拦截:
-
参数值关键词匹配:拦截 GET/POST/COOKIE 中含
system(、exec%28、|id、&& whoami、`ls`、${7*7}(表达式注入)等字符串 -
Shell 元字符检测:拦截请求中出现未编码的
|、&&、;、`、$()、$(())等,尤其在参数值非预期位置出现时 -
异常编码与混淆模式:OWASP CRS 的
REQUEST-932-APPLICATION-ATTACK-RCE.conf包含对 base64、hex、Unicode、变量拼接(如$a=$b;$a("id"))等绕过手法的多层检测 - HTTP 协议异常组合:例如 User-Agent 或 Referer 字段中携带命令片段(常用于隐蔽 RCE)、Content-Type 异常(如伪装成图片但 body 含 PHP 函数调用)
在 ModSecurity + CRS 环境下的实操配置
以 Ubuntu 24.04 + Apache/Nginx + ModSecurity3 + OWASP CRS v4.5 为例:
- 确认 CRS 规则已加载:
SecRule FILES_TMPNAMES "@rx \.(php|phtml|phar)$" "id:9001,phase:2,deny,msg:'PHP file upload attempt'"类规则存在且生效 - 检查 RCE 相关规则是否启用:查看
/etc/modsecurity/crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf是否被Include进主配置;默认已启用,无需额外开启 - 调整敏感度(可选):若误报高,可临时降低
SecAction "id:900110,phase:1,pass,nolog,tag:'OWASP_CRS',setvar:tx.rce_score_threshold=5",但不建议关闭 - 验证拦截效果:用测试 payload 访问目标 URL,例如:
?cmd=system('id')或POST /form.php → cmd=%60cat%20/etc/passwd%60,应返回 403 并在/var/log/modsec_audit.log中记录匹配规则 ID(如 932100、932160)
必须同步加固的 PHP 层措施
WAF 是边界防护,不能替代代码与配置加固。PHP 8.3.14 环境下务必补充以下措施:
- 禁用高危函数:在 php.ini 中设置
disable_functions = system,exec,shell_exec,passthru,proc_open,popen,pcntl_exec(注意:此配置对 CLI 模式无效,仅影响 Web SAPI) - 关闭动态代码执行:确认
allow_url_include = Off、enable_dl = Off - 输入严格过滤:所有外部输入(GET/POST/FILE/COOKIE)必须经
filter_var()或白名单校验,禁止拼接到exec()等函数中 - 使用安全替代方案:用
escapeshellarg()+ 白名单命令封装,或改用原生 PHP 功能(如file_get_contents()替代cat)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











