
无论是社交网站的头像上传,还是论坛的附件分享,只要存在代码设计缺陷,攻击者就能通过这个“入口”轻松控制你的服务器。
文件上传漏洞的本质是开发者未对用户上传的文件进行充分的安全校验,导致攻击者可以上传恶意文件并执行。
前端校验绕过
修改HTTP请求
黑名单绕过
黑名单机制:禁止上传指定扩展名(如.php,.jsp,.asp)。
绕过核心逻辑:找到“黑名单未覆盖”或“可被解析执行”的特殊扩展名。
冷门的扩展名,例如:.php也可以修改为php5, .phtml等。
大小写混淆;
双扩展名绕过;
空字节截断(%00);
空格/点号
:$DATA流(Windows NTFS特性)
配合文件包含漏洞
白名单绕过
白名单机制:只允许指定扩展名(如.jpg, .png, .pdf)。
绕过核心逻辑:利用服务器特性或逻辑漏洞,使合法扩展名文件被执行。
解析漏洞。
内容欺骗攻击(例如:图片马)。
MIME类型伪装。
前端渲染文件伪装。
重命名文件
上传后强制重命名(如用UUID随机生成文件名),避免路径预测。
示例:a3f5b2c1.jpg → 攻击者无法直接定位恶意文件。
隔离存储
将上传文件存储在非Web目录,通过脚本代理访问(如PHP读取文件后输出)。
使用云存储服务(OSS),彻底分离服务器和文件资源。
禁用执行权限
配置服务器,禁止上传目录执行脚本。
内容安全检测
对图片/文档进行二次处理(如压缩、裁剪),破坏潜在的恶意代码。
使用杀毒引擎扫描文件(如ClamAV)。
白名单校验(核心!)
文件扩展名:仅允许业务必需的类型(如.jpg,.png)。
MIME类型:从服务端校验 Content-Type(如image/jpeg)。
文件头检测:通过文件中的字节判断真实类型(如PNG文件头为 ‰PNG)。
总结
不信任任何上传的文件。
层层校验,纵深防御(扩展名 + MIME + 文件头 + 内容扫描)。
最小化权限(存储隔离 + 禁用执行)。
案例1:某电商平台头像上传漏洞
攻击者上传包含Webshell的图片文件,获取服务器权限后盗取数百万用户数据,最终平台因违反GDPR被罚款200万欧元。
案例2:高校教务系统漏洞
学生上传伪造的 .docx 文件(实际为恶意脚本),绕过检测后篡改考试成绩,导致系统停运3天。
如果网站需要用户上传PDF文件,如何设计一套完整的安全方案?
欢迎在评论区分享你的想法!
《网安60秒丨命令注入:你的网站正在替黑客执行命令!》