PHP上传漏洞如何上传木马文件
时间:2026-01-31 11:09:44 109浏览 收藏
对于一个文章开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《PHP文件上传漏洞如何上传木马》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!
PHP文件上传漏洞源于开发疏忽,核心风险在于客户端可控的$_FILES['type']和文件扩展名校验失效,需强制重命名、白名单校验、执行隔离三者缺一不可。

PHP 文件上传漏洞本身不是功能,而是因开发疏忽导致的不安全行为;直接利用它上传木马属于违法行为,且现代 PHP 环境(如开启 open_basedir、禁用 eval/assert、禁用危险函数)和 Web 服务器配置(如 Nginx 禁止执行上传目录下的 PHP)已大幅压缩此类攻击面。
为什么 $_FILES 直接保存就可能出问题
开发者常误以为检查 $_FILES['file']['type'] 或文件后缀就足够,但这两个值均由客户端控制,完全不可信。浏览器可随意伪造 Content-Type,也能把 shell.php 改名为 shell.jpg 提交。
$_FILES['file']['type']是浏览器发送的 MIME 类型,例如image/jpeg,服务端未校验时可被绕过- 仅依赖
pathinfo($filename, PATHINFO_EXTENSION)取扩展名,无法防御shell.php.jpg或shell.php%00.jpg(在旧版 PHP 中触发空字节截断) - 未重命名文件,保留原始名可能导致路径遍历(如
../../.htaccess)或覆盖关键文件
真实环境中绕过常见校验的典型方式
这些是渗透测试中验证逻辑缺陷的思路,不是操作指南——生产环境必须杜绝所有此类路径。
- 使用
getimagesize()验证图片文件头,但若只校验一次且未配合 MIME + 扩展名白名单,仍可能被构造“图片马”绕过(如在 JPEG 文件末尾追加 PHP 代码) - 用
finfo_open(FILEINFO_MIME_TYPE)检测实际内容类型,比$_FILES['type']可靠,但仍需配合扩展名白名单和重命名 - Apache 环境下,若上传目录存在
.htaccess且允许覆盖,攻击者可能上传含AddType application/x-httpd-php .xxx的文件,再上传shell.xxx触发解析
安全上传必须做的三件事
缺一不可,少做任何一项都可能让防护形同虚设。
- 强制重命名:用
uniqid() . bin2hex(random_bytes(8))生成唯一文件名,彻底丢弃客户端传来的$_FILES['file']['name'] - 白名单校验:只允许
['jpg', 'jpeg', 'png', 'gif']等明确安全的扩展名,且通过strtolower(pathinfo($new_name, PATHINFO_EXTENSION))获取,不依赖客户端输入 - 隔离执行:将上传目录置于 Web 根目录之外(如
/var/www/uploads/→ 移到/var/data/uploads/),或在 Web 服务器配置中禁止该目录下执行脚本(Nginx 中用location ~ \.php$ { deny all; })
$upload_dir = '/var/data/uploads/';
$allowed_exts = ['jpg', 'jpeg', 'png', 'gif'];
$file_info = pathinfo($_FILES['file']['name']);
$ext = strtolower($file_info['extension'] ?? '');
if (!in_array($ext, $allowed_exts)) {
die('Invalid file extension');
}
$new_name = uniqid() . '.' . $ext;
move_uploaded_file($_FILES['file']['tmp_name'], $upload_dir . $new_name);
真正难防的是业务逻辑层的盲点:比如允许用户上传 ZIP 并服务端解压,却未限制解压路径;或上传 SVG 文件,而 SVG 内可嵌入 标签触发 XSS。这类问题不会出现在“上传木马”的教科书式场景里,但更隐蔽、更常被忽略。
今天关于《PHP上传漏洞如何上传木马文件》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
325 收藏
-
462 收藏
-
341 收藏
-
192 收藏
-
161 收藏
-
159 收藏
-
456 收藏
-
168 收藏
-
424 收藏
-
138 收藏
-
309 收藏
-
303 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习