Web安全
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入【1】
07SQL 注入【2】
08SQL注入 Labs
08SQL注入速查表
09XSS
09跨站脚本攻击【XSS】
09XSS Labs
10跨站请求伪造【CSRF】
11服务器端请求伪造【SSRF】
12XML 外部实体注入【XXE】
13代码执行漏洞
14命令执行漏洞
15文件包含漏洞
16文件上传漏洞
17反序列化漏洞
18业务逻辑漏洞
19未授权访问漏洞集合
20跨源资源共享【CORS】
21SSTI模板注入
22并发漏洞
23点击劫持【Clickjacking 】
24请求走私
25路径遍历
26访问控制
27身份验证漏洞
28WebSocket
29Web缓存中毒
30HTTP 主机头攻击
31信息泄露漏洞
32原型污染
33NoSQL注入
API 安全
01web应用程序
02HTTP协议
03API概述
04分类类型
05交换格式
06身份验证
07常见API漏洞
08crAPI靶场
09JWT
10OAuth 2.0身份验证
11GraphQL【1】
11GraphQL【2】
12DVGA靶场
13服务器端参数污染
14API文档
15API Labs
16OAuth Labs
17GraphQL API Labs
18JWT Labs
小程序
小程序抓包
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
-
+
首页
15文件包含漏洞
## 一、定义 因为相同代码重复出现在不同文件中会产生代码冗余,所以出现了文件包含函数,让代码更为高效。需要用到这部分代码就会去调用,且被包含的文件会被当做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为关闭。
毛林
2025年9月6日 12:34
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码