Skip to main content

路径

POST /image/check/:imageId

认证

Bearer JWT(supabaseAuth()

参数

参数位置说明
imageIdpath图片 ID(decodeURIComponent 解码)。可以是新 uuid 或 legacy path 形态
无请求体。

响应

{ "ok": true, "skipped": true }
  • ok — 检查通过(或被跳过)始终为 true
  • skipped — 仅当命中 gen_ 跳过逻辑时为 true,否则字段不出现(undefined

错误

状态码含义
401无 JWT / jwtPayload.sub 缺失
400imageId 缺失,或越权(imageId 必须以 userId 开头),或检测过程抛错
451命中 CSAM,body 为 {"errorCode":"csam_blocked"}(JSON 字符串)

逻辑

checkImageCsam(imageId, userId, deps)src/hono/image/csam.ts):
  1. 越权校验imageId 不以 userId 开头 → 抛错(被外层转 400)
  2. 跳过生成图 — 文件名以 gen_ 开头(AI 生成结果,已在生成链路审过)→ action: "skip",返回 { ok: true, skipped: true }
  3. CSAM 检测 — 取原图一次性签名 URL(getMessageAllUrls),过 detectCsamFromUrl
  4. 命中处理action: "block":先经 cdnClient.deleteAssets 清掉原文件 + gen_/blur_/thumb_ 派生前缀,记 csam.blocked.image_upload warn 日志,handler 抛 451
CSAM 阈值为 0.01(ultra-conservative,由 owen 拍板,见 kira-cdn)。删除失败仅 log,不重试。

src/hono/image/index.tsPOST /check/:imageId)+ src/hono/image/csam.tscheckImageCsam

相关