任意文件上传漏洞
📦 什么是“任意文件上传漏洞”?
网站设置了可供用户上传文件(头像、附件等)的功能点,但未严格校验文件类型与内容。 导致攻击者可上传恶意脚本(如 .php 、 .jsp),从而控制服务器。
⚡ 攻击者能做什么?(后果一览)
| 行为 | 后果 |
|---|---|
| 🔓 获取服务器控制权 | 任意操控系统 |
| 🗄️ 窃取数据库信息 | 如用户信息、密码、key、业务核心数据 |
| ✍️ 篡改/删除文件 | 篡改网站核心代码,植入非法链接 |
| 💣 植入木马/勒索软件 | 瘫痪内部网络、勒索用户 |
| 🌀 建立后门长期潜伏 | 设置隐蔽的后门,便于长久控制服务器 |
⚠️ 漏洞原理
❌ 仅依赖前端 JS 验证文件扩展名
❌ 开发者没有对上传文件重命名
❌ 上传目录具备执行权限
🧹防御建议
✅ 白名单验证— 只允许上传安全的 MIME 类型(如 image/png)文件。
✅ 重命名文件— 使用随机 UUID 命名,攻击者无法猜到路径。
✅ 内容深度检测— 对图片重新采样压缩,移除潜在恶意代码。
✅ 目录权限隔离— 上传目录权限设置为 “只读+不解析脚本”。
✅ 限制大小 & 禁用目录列表— 如最大支持3MB的文件,不返回目录结构。
✅ 部署 WAF— 拦截常见恶意载荷。
📖小测验
Q1: 以下哪个上传操作最可能是危险的?
A. 上传一张1.jpg 猫咪图片
B. 上传一个 1.php 文件
C. 上传一个 1.png 文件
✅ 答案:B —— .php 是脚本文件,一旦被执行攻击者就可能控制网站。
Q2: 为了防止上传漏洞,是否只检查文件扩展名就足够安全?
A. 足够安全
B. 不够,必须结合内容检测
✅ 答案:B —— 扩展名可轻易伪造。
Q3: 以下哪项不是有效防御措施?
A. 将上传目录设置为可执行脚本
B. 使用随机字符串重命名文件
C. 检查文件内容真实类型
✅ 答案:A —— 禁止赋予上传目录可执行权限。
