首页/安全/渗透测试与安全评估速查/远程文件包含(RFI)检查
常见漏洞验证121 条

远程文件包含(RFI)检查

当包含函数接受远程地址(allow_url_include 等配置开启)时可加载外部资源;默认配置通常关闭,验证以配置核查优先。

RFI 与 LFI 的区别

文件包含类问题分两种:LFI 只能包含服务器本地文件,RFI 则能包含远程地址、把外部内容当代码执行。RFI 的成立条件是运行环境允许远程包含——PHP 侧对应 allow_url_include 这类开关,该配置项在较新的 PHP 版本中已弃用或移除,因此现代 PHP 环境上 RFI 少见,包含类问题更多以 LFI 及其日志投毒等方式出现。旧版环境与部分其他语言实现仍需核查。

基本信息

成立条件包含函数接受远程地址且运行环境允许远程包含
核查优先先做配置核查,再考虑动态验证
常见平台旧版 PHP 应用、部分 Java/JSP 与传统 CMS
参考标准PHP 手册配置说明、CWE-98

典型使用场景

  • 遗留系统评估中确认是否存在可被利用的包含点
  • 代码审计时定位用户输入直接进入包含语句的写法
  • 配置核查中确认远程包含开关的实际状态
  • 与 LFI 一起评估:包含点通常同时存在两类风险
  • 为客户提供包含类问题的统一整改建议

核查要点

核查要点
1. 核查运行环境的远程包含相关配置与包装协议启用情况(以官方手册为准)
2. 如确需动态验证:在自建 HTTP 服务上放置无害文本文件,观察是否被应用拉取
3. 通过访问日志确认拉取行为与来源地址,作为证据留存
4. 不放置任何可执行内容,不指向任何外部资源,验证后立即撤下自建服务
5. 结论同时说明包含点的输入来源与修复建议(白名单、禁用动态包含)

检查项与判据

检查项正常状态异常信号
远程包含配置关闭或该配置项在当前版本不存在处于开启状态
包含参数来源白名单映射,不接受任意路径直接使用请求参数
应用访问日志无出站拉取记录出现指向测试地址的请求
错误信息不暴露路径细节包含失败时回显完整路径
严禁在验证时指向真实外部资源,也不要在自建服务上放置可执行内容:验证目标只是确认“应用是否会按输入去拉取远程内容”。
考虑到旧结论容易过期,修复方向建议写成通用原则:包含目标使用白名单映射、禁止动态包含、关闭不必要的包装协议与远程包含能力。

易错点

  • 未核查运行环境配置就直接做动态测试,风险不可控且难以归因
  • 把应用对外部服务的一次探测当作 RFI 成立证据,实际只是正常外联
  • 验证时在自建服务上放置可执行内容,把测试变成了真实的代码加载
  • 只按旧资料判定“默认关闭”,未核对目标实际的运行环境与版本
  • 只看包含点不看输入来源,修复建议无法落到具体参数上

数据来源与参考

  • PHP 手册(allow_url_include 配置说明)
  • CWE-98
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌