20-9

远程文件包含和本地文件包含这两种涉及的 PHP 设置有什么

1. 本地文件包含(LFI)

本地文件包含漏洞是指攻击者能够包含服务器本地文件系统上的任意文件。这种漏洞的利用通常不依赖于特定的 php.ini 设置,而是完全取决于代码本身的不安全实现

关键的 PHP 设置:

  • allow_url_include:这个设置通常与 LFI 无关。它只控制是否允许包含远程文件。即使 allow_url_includeOff,LFI 漏洞仍然可以存在
  • open_basedir:这是一个重要的安全设置,它可以限制 PHP 脚本能够访问的文件目录。如果配置得当,它可以有效缓解LFI的危害。例如,将 open_basedir 设置为 /var/www/html/,那么PHP脚本就无法包含该目录之外的文件,例如 /etc/passwd

总结:对于 LFI,PHP 配置本身提供的防御措施相对有限。open_basedir 是最有用的一个,但代码层面的白名单验证和输入过滤才是最根本的防御手段

2. 远程文件包含(RFI)

远程文件包含漏洞是指攻击者能够包含来自外部服务器的任意文件。这种漏洞的利用直接依赖于 PHP 的特定配置

关键的 PHP 设置:

  • allow_url_include:这是RFI 漏洞的核心开关
    • allow_url_include = On:允许通过 URL(如 http://ftp://)来包含远程文件。这是导致 RFI漏洞的直接原因
    • allow_url_include = Off禁止通过 URL 来包含远程文件。这是默认和推荐的安全设置。只要这个设置是 Off,即使代码本身存在缺陷,也无法触发远程文件包含攻击
  • allow_url_fopen:这个设置间接影响 RFI。它控制是否允许 URL 作为文件来处理,比如在 file_get_contents()fopen() 函数中。虽然它本身不直接影响 include,但在某些攻击场景中,如果攻击者需要远程获取文件内容再进行处理,这个设置就会起到作用。然而,allow_url_include 才是决定性的