首页/安全/漏洞与攻击面速查/文件包含(LFI/RFI)原理与防护
Web 漏洞原理与防护55 条

文件包含(LFI/RFI)原理与防护

文件包含问题出现在动态加载场景:用户输入影响 include 路径时可读取本地文件(LFI),若允许远程加载则可能引入外部内容(RFI);防护是用固定映射表替代自由路径拼接。

漏洞与攻击面速查安全更新于 2026-10-12
常见场景PHP include/require、模板引擎动态路径、插件加载
危害读取配置与凭据文件、引入可执行内容
防护白名单映射 page=home 到 home.php;关闭远程包含能力

安全改造示例(PHP)

安全改造示例(PHP)
$pages = ['home' => 'home.php', 'about' => 'about.php'];
$key = $_GET['page'] ?? 'home';
if (!isset($pages[$key])) {
    http_response_code(404);
    exit;
}
include __DIR__ . '/pages/' . $pages[$key];
现代 PHP 默认关闭 allow_url_include;仍要关注 phar://、data:// 等包装器与日志包含链路。

易错点

  • 用黑名单过滤 ../ 与 http:// 的写法容易被编码与包装器绕过:应改为映射表方式

数据来源与参考

  • PHP 手册(include 与 allow_url_include 配置)
  • OWASP WSTG File Inclusion 测试章节
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌