文件上传测试是Web安全测试中的重要环节,主要关注功能、安全和用户体验。
一、核心关注点
-
文件类型验证
- 白名单/黑名单:白名单(只允许特定类型)更安全,黑名单(禁止危险类型)易被绕过。
- 绕过风险:攻击者可能修改文件头(如伪装图片的PHP文件)。
-
文件大小限制
- 服务器压力:过大文件可能导致存储溢出或DoS攻击。
- 用户体验:需明确提示限制(如前端JS验证+后端二次校验)。
-
文件名处理
- 特殊字符:
../(路径遍历)、空格、Unicode字符可能导致覆盖或注入。 - 重命名策略:随机文件名可避免冲突(如
UUID.jpg)。
- 特殊字符:
-
内容校验
- 魔术字节:检查文件真实类型(如
FF D8 FF是JPEG头)。 - 恶意内容:扫描病毒、WebShell代码(如图片马)。
- 魔术字节:检查文件真实类型(如
-
存储与访问
- 隔离存储:文件应存于非Web根目录,通过脚本代理访问。
- 权限控制:防止直接执行上传文件(如
.htaccess禁用PHP解析)。
-
日志与监控
- 上传日志:记录IP、时间、文件名,便于追踪攻击。
二、不同场景的区别与影响
| 测试维度 | 普通网站(如头像上传) | 企业应用(如合同提交) | 社交媒体(如图片/视频) |
|---|---|---|---|
| 文件类型 | 图片(JPG/PNG) | PDF/DOCX | 图片/视频/动图(MP4/GIF) |
| 大小限制 | 1-5MB | 10-50MB | 视频可能100MB+ |
| 安全风险 | XSS(通过SVG)、CSRF | 恶意宏(Office文件) | 恶意脚本(Flash/HTML5) |
| 存储影响 | CDN加速小文件 | 需长期归档,合规性要求高 | 高带宽成本,需分片上传 |
三、典型攻击与防御
-
路径遍历攻击
- 攻击示例:上传
../../../evil.php覆盖系统文件。 - 防御:规范化路径,禁用
../。
- 攻击示例:上传
-
WebShell上传
- 攻击示例:上传
.jpg文件包含PHP代码,配合解析漏洞执行。 - 防御:禁用服务器解析(如Nginx配置
location ~* \.php$ { deny all; })。
- 攻击示例:上传
-
DoS攻击
- 攻击示例:重复上传大文件耗尽磁盘。
- 防御:限速、限制单用户上传频率。
四、测试工具与方法
-
手动测试
- 修改HTTP请求(Burp Suite)绕过前端验证。
- 尝试上传畸形文件(如双扩展名
test.php.jpg)。
-
自动化工具
- OWASP ZAP:自动化扫描上传漏洞。
- VirusTotal API:集成病毒扫描。
-
代码审计
- 检查后端是否仅依赖
Content-Type(不可信)或file extension。
- 检查后端是否仅依赖
五、最佳实践
- 纵深防御:前端+后端+服务器层多重校验。
- 沙箱处理:对Office/PDF文件在隔离环境解析。
- 错误信息:避免暴露服务器路径(如自定义
403页面)。
通过全面覆盖这些方面,可显著降低文件上传功能的风险。
2092

被折叠的 条评论
为什么被折叠?



