远程文件包含和本地文件包含这两种涉及的 PHP 设置有什么
1. 本地文件包含(LFI)
本地文件包含漏洞是指攻击者能够包含服务器本地文件系统上的任意文件。这种漏洞的利用通常不依赖于特定的 php.ini
设置,而是完全取决于代码本身的不安全实现
关键的 PHP 设置:
allow_url_include
:这个设置通常与 LFI 无关。它只控制是否允许包含远程文件。即使allow_url_include
为Off
,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
才是决定性的
总结:allow_url_include
的值是判断一个 PHP 应用是否存在RFI漏洞风险的最关键因素。在生产环境中,始终建议将其设置为 Off
特性 | 本地文件包含(LFI) | 远程文件包含(RFI) |
---|---|---|
漏洞类型 | 包含服务器本地文件 | 包含外部服务器文件 |
核心函数 | include($filename) | include($url) |
关键PHP设置 | open_basedir(缓解) | allow_url_include(决定性) |
防御重点 | 代码层面的白名单和输入过滤 | php.ini 中将 allow_url_include 设为 Off |
风险 | 读取敏感文件,配合其他漏洞可能导致RCE | 直接导致RCE |