文件上传功能若校验不严,攻击者可上传 WebShell 获取服务器控制权。
一、常见绕过手法
- 修改
Content-Type为image/png绕过 MIME 检查 - 双扩展名
shell.php.jpg绕过黑名单 - 利用解析漏洞(如 Apache 多后缀解析)
- 在图片 EXIF 中嵌入 PHP 代码配合文件包含
二、安全校验设计
python
import magic
ALLOWED = {"image/png", "image/jpeg", "image/webp"}
def validate_upload(file_bytes: bytes) -> bool:
mime = magic.from_buffer(file_bytes, mime=True)
if mime not in ALLOWED:
return False
# 二次校验:解析图片头,确认结构合法
return True关键措施:基于文件魔数而非扩展名判断类型、重命名文件为随机 UUID、上传目录禁止脚本执行、将文件存储于独立对象存储并隔离域名。