结论:能拦一部分,但别把 WAF 当唯一防线,PHP2Shell 这类漏洞的绕过手法多,WAF 规则更新往往滞后。
① 先搞清楚漏洞成因:多数所谓 PHP2Shell 是文件上传校验不严、伪协议或反序列化导致的代码执行,WAF 主要看请求特征,对变形 payload、分块传输、编码绕过不一定百分百覆盖。
② 真正有效的做法是代码层修复:上传目录禁止脚本执行(Nginx 里 location 匹配上传路径直接 return 403 或关掉 PHP handler),文件类型用白名单校验,文件名随机化并去掉可执行后缀。
③ WAF 当兜底:开启规则集并保持更新,重点加自定义规则拦截常见伪协议、危险函数调用特征,同时开日志观察拦截记录,发现漏拦及时补规则。
④ 上线后做验证:用测试环境复现攻击请求,确认 WAF 和代码层都能挡住,再配合最小权限运行 PHP-FPM、关闭危险函数,形成多层防护才稳。