""" 文件校验工具 ========== 提供文件头魔数校验和上传文件统一校验功能, 防止 MIME 伪造攻击和危险文件上传。 """ from fastapi import HTTPException def validate_file_magic(content: bytes, expected_content_type: str) -> bool: """通过文件头魔数校验文件真实类型,防止 MIME 伪造攻击。""" if len(content) < 12: return False # 拒绝常见危险文件头 dangerous_signatures = [ (b"MZ", "Windows 可执行文件"), # .exe, .dll (b"#!", "Shell 脚本"), # bash, python, etc (b"PK\x03\x04", "ZIP 压缩包"), # .zip, .jar, .docx (b" None: """统一校验文件大小和魔数,失败时直接抛 HTTPException。""" if len(content) > max_size: max_mb = max_size // 1024 // 1024 raise HTTPException( status_code=413, detail=f"{type_label}文件大小不能超过 {max_mb}MB", ) if not validate_file_magic(content, content_type): raise HTTPException( status_code=400, detail=f"{type_label}文件内容与实际格式不符,可能存在安全风险", )