预防lfi的核心是切断攻击链:限制文件访问范围、阻断非法路径解析、强化后端逻辑。需关闭目录浏览与危险模块,限制apache进程权限,用modsecurity过滤路径,强制后端白名单校验与路径规范化。

Apache 本身不直接执行 PHP 的 include(),但它是承载存在 LFI 风险应用的运行环境。预防 LFI 的核心不是“让 Apache 拦住所有 ../”,而是切断攻击链:限制文件访问范围 + 阻断非法路径解析 + 强化后端逻辑。以下措施需配合使用,缺一不可。
关闭目录浏览与禁用危险模块
这是最基础的防线。目录遍历常依赖能列出文件或猜测路径,而 SSI、CGI 等模块可能放大包含风险:
- 在
<directory></directory>块中明确禁用索引:Options -Indexes - 如无需服务端包含,彻底关闭 SSI:
Options -Includes - 禁用 CGI 执行(除非业务必需):
Options -ExecCGI - 确保
AllowOverride None或严格限制可覆盖项,避免 .htaccess 被恶意篡改
限制 Apache 进程的文件系统权限
即使代码有漏洞,若 Apache 用户(如 www-data)根本读不到 /etc/passwd 或日志目录,LFI 就无法落地:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 将网站根目录设为独立用户/组,例如:
chown -R www-data:www-data /var/www/example.com - 递归设置最小必要权限:
chmod -R 755 /var/www/example.com(目录),644(文件) - 将敏感路径(如
/etc、/var/log、/tmp)从 Apache 用户的读取权限中移除,可用setfacl或调整父目录权限实现
用 ModSecurity 设置路径过滤规则
ModSecurity 是 Apache 的 Web 应用防火墙(WAF),可主动拦截典型 LFI 载荷:
- 启用 CRS(OWASP Core Rule Set)规则集,它自带针对
../、%00、etc/passwd、apache2/access.log等关键词的检测 - 自定义简单规则示例(放在主配置或虚拟主机中):
SecRule ARGS "@rx \.\./" "id:1001,deny,status:403,msg:'Path traversal detected'" - 注意:规则需结合
SecRequestBodyAccess On和SecResponseBodyAccess On才能覆盖 GET/POST/响应体
强制后端做白名单校验与路径规范化
Apache 层的防护是辅助,真正可靠的防御必须落在应用代码里:
- 禁止直接拼接用户输入到
include()或file_get_contents(),改用白名单映射:$pages = ['home' => 'home.php', 'about' => 'about.php']; $page = $_GET['page'] ?? ''; include($pages[$page] ?? '404.php'); - 若必须支持动态路径,先调用
realpath()获取绝对路径,再检查是否在允许目录内:$path = realpath('/var/www/html/' . $_GET['file']); if (strpos($path, '/var/www/html/') !== 0) die('Access denied'); - 禁用 PHP 的危险配置:
allow_url_fopen=Off、allow_url_include=Off(防 RFI 及伪协议利用)










