saveSiteImage 只查扩展名白名单 + Category=image 即落盘,管理员可将 HTML 字节存为 logos/logo.png(当前仅靠 nosniff + 按扩展名 Content-Type 兜底,纵深防御链条断裂)。现与头像/附件上传(#14/#21)口径一致: 读取字节后 contentMatchesType 校验,不匹配返回 400 (settings_upload_bad_content,i18n 中英新增)。 - handlers/settings.go: saveSiteImage 魔数校验后再写盘 - 测试: TestSiteImageUploadRejectsMismatchedContent (favicon/logo 各:PNG 扩展名 + HTML 字节 → 400;真实 PNG → 200)