Skip to content

[security-hardening] backend-CHEK-media:媒体上传防图床、防盗链、内容安全与签名 URL #21

Description

@hongzexin

背景

来自 2026-06-06/07 frontend-app/CHEK 上线前安全与滥用风险排查。backend-CHEK-media 位于 chekdata/CHEK monorepo,ops-bootstrap 网关公开路由包含 /api/chek-media/v1/media/*

风险

  • 媒体服务被外部当图床或大文件中转。
  • 上传 MIME 伪装、脚本文件、异常图片在 CDN/浏览器公开。
  • 审核中/私有媒体可通过 URL 或 ID 枚举访问。
  • 永久公开 URL、bucket/path 泄露或无防盗链导致滥用。

要求

  • 服务端限制文件大小、MIME allowlist、magic bytes,不依赖前端。
  • 上传后默认 private/pending-hidden,自动内容审核通过后才进入 public。
  • 签名 URL TTL 可配置,返回不泄露私有 bucket/credential。
  • 公开读取必须校验 moderation/public visibility;私有/审核中资源不可匿名访问。
  • CDN/TOS 防盗链、bucket/path/scope 隔离与 ops-bootstrap 配置联动。

验收

  • fixture 测试:伪 PNG、超大文件、非 allowlist MIME 均 4xx。
  • fixture 测试:pending/private/blocked media 不能匿名访问,不能通过改 ID 枚举。
  • DEV smoke:错误 MIME/magic 不创建公开 URL;签名 URL 有 TTL。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions