WEB安全
00-HTTP协议
01-前端基础【HTML】
02-前端基础【CSS】
03-后端基础【PHP速通】
04-后端基础【PHP面向对象】
05-MySQL基础操作
06-前后端联动【代码练习】
07-SQL注入
08-SQL注入 Labs
09-跨站脚本攻击【XSS】
09-XSS Labs
10-CSRF
11-SSRF
12-XML 外部实体注入【XXE】
13-代码执行漏洞
14-命令执行漏洞
15-文件包含漏洞
16-文件上传漏洞
17-反序列化漏洞
18-业务逻辑漏洞
19-未授权访问漏洞集合
20-跨源资源共享【CORS】
21-SSTI模板注入
22-并发漏洞
23-点击劫持【Clickjacking 】
24-请求走私
25-路径遍历
26-访问控制
27-身份验证漏洞
28-WebSocket
29-Web缓存中毒
30-HTTP 主机头攻击
31-信息泄露漏洞
32-原型污染
33-API概述
34-API分类类型
35-API交换格式
36-API身份验证
37-API常见漏洞
38-crAPI靶场
39-JWT
40-DVGA靶场
41-服务器端参数污染
42-API Labs
43-OAuth Labs
44-GraphQL API Labs
45-JWT Labs
46-小程序抓包
47-云存储
48-对象存储OSS
49-存储桶
50-存储桶漏洞
51-STS访问OSS
-
+
15-文件包含漏洞
浏览
1
## 定义 因为相同代码重复出现在不同文件中会产生代码冗余,所以出现了文件包含函数,让代码更为高效。需要用到这部分代码就会去调用,且被包含的文件会被当做PHP代码执行,而且忽略后缀本身。 **注意:文件包含并不是漏洞,但是被包含的文件能够被攻击者控制就是漏洞。** ## 分类 文件包含分为 - 本地包含(LFI) - 远程包含(RFI) 【远程包含默认不开启 allow_url_include = Off】 注意:他们可以转换,本地文件包含并不代表无法包含远程文件(SMB服务)。 ## 函数解析 ### include() - 引用外部文件 - 只有代码执行到include代码段时,调用的外部文件才会被引用并读取 - 当引用的文件发生错误时,系统只会给出警告错误,而整个php文件会继续执行 ### include_once() include()函数的区别是: - 会在导入文件前先检测文件是否在该页面的其他部分被引用过,如果有,程序只能引用一次 - 如果导入的文件中存在自定义函数,那么在同一程序中重复导入该文件,在第二次导入时会发生错误 - 因为PHP不允许相同名称的函数重复声明 ### require() - 引用外部文件 - 在PHP文件被执行之前,会先去把被包含文件的内容提取出来然后整合成新的php一起执行 - 当引用文件发生错误时,系统会报错,并停止执行下面代码 ### require_once() 与require()函数唯一区别是 - 会在导入文件前先检测文件是否在该页面的其他部分被引用过,如果有,程序只能引用一次 ## 示例 ```php # 1.txt <?php echo "efg";?> ``` ### include() **引用外部文件** ```php # 1.php <?php echo "abc <br />"; include("1.txt"); echo "<br /> abc <br />"; include("1.txt"); echo "<br /> abc <br />"; ?> ``` 执行结果:  **引用不存在的[错误的]外部文件** ```php # 1.php <?php echo "abc <br />"; include("1.jpg"); //引用不存在的1.jpg echo "<br /> abc <br />"; include("1.txt"); echo "<br /> abc <br />"; ?> ``` 运行结果:  ### include_once() **引用外部文件** ```php # 1.php <?php echo "abc <br />"; include_once("1.txt"); echo "<br /> abc <br />"; include_once("1.txt"); echo "<br /> abc <br />"; ?> ``` 运行结果:  **引用不存在的[错误的]外部文件** ```php # 1.php <?php echo "abc <br />"; include_once("1.jpg"); //不存在的1.jpg echo "<br /> abc <br />"; include_once("1.txt"); echo "<br /> abc <br />"; ?> ``` 运行结果:  ### require() **引用存在的外部文件** ```php #1.php <?php echo "abc <br />"; require("1.txt"); echo "<br /> abc <br />"; require("1.txt"); echo "<br /> abc <br />"; ?> ``` 运行结果:  **引用不存在的[错误的]外部文件** ```php # 1.php <?php echo "abc <br />"; require("1.jpg"); //不存在的1.jpg echo "<br /> abc <br />"; require("1.txt"); echo "<br /> abc <br />"; ?> ``` 运行结果:  ### require_once() **引用存在的外部文件** ```php #1.php <?php echo "abc <br />"; require_once("1.txt"); echo "<br /> abc <br />"; require_once("1.txt"); echo "<br /> abc <br />"; ?> ``` 运行结果:  **引用不存在的[错误的]外部文件** ```php # 1.php <?php echo "abc <br />"; require_once("1.jpg");//不存在的1.jpg echo "<br /> abc <br />"; require_once("1.txt"); echo "<br /> abc <br />"; ?> ``` 运行结果:  ## 防护措施 **输入验证和过滤** - 对用户输入的数据进行严格的验证和过滤。例如,对于用于文件包含的参数,只允许特定的、预期的文件名或路径模式。可以使用白名单的方式,只允许包含特定目录下的文件,并且对文件名中的特殊字符(如 `../`)进行过滤或转义。 **使用安全函数和配置** - 在 PHP 中,可以通过配置 `php.ini` 文件来禁用危险的函数。例如,将 `allow_url_include` 设置为 `Off`,这样就可以禁止包含远程文件(对于 RFI 的防范)。同时,使用安全的文件操作函数,避免使用存在安全隐患的函数。 **最小权限原则** - 对 Web 应用程序的文件和目录设置合适的权限。确保应用程序只能访问它所需要的文件和目录,并且以最小的权限运行。例如,如果一个 Web 应用程序不需要写入某个目录,就不要给它写入权限,这样可以减少攻击者通过文件包含漏洞对文件进行恶意修改的风险。 **代码审计和安全测试** - 定期对应用程序的代码进行审计,检查是否存在文件包含漏洞。同时,进行安全测试,如渗透测试,模拟攻击者的行为,发现潜在的文件包含漏洞并及时修复。 无需情况下设置allow_url_include和allow_url_fopen为关闭。
毛林
2026年11月15日 18:27
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~