当 image_sizes 为空时,媒体审核被跳过

此 Bug 涉及 Skip review media groups(跳过媒体审查组)设置。

当从移动设备发布图片时,图片上传成功,且帖子正文中正确包含了图片引用(例如,...)。

然而,随后的 POST /posts 请求包含:

“image_sizes”: {}

服务器端的媒体审查检查仅在 manager.args[:image_sizes].present? 时运行:

if manager.args\[:image_sizes\].present? &&
       !user.in_any_groups?(SiteSetting.skip_review_media_groups_map)
    return :contains_media
  end

在 Ruby 中,空哈希不被视为 present?,因此该帖子未被识别为包含媒体内容,也不会被送入审查队列。因此,skip_review_media_groups 检查永远不会被执行。

HAR 证据:

  • POST /uploads 成功(2xx)。
  • POST /posts 负载在 raw 字段中包含图片 Markdown。
  • 同一负载中包含 “image_sizes”: {}。
  • 该帖子未被加入审查队列。

Web 编辑器通过编辑器预览 DOM 中的图片构建 image_sizes。这使得媒体审查依赖于客户端提供的预览元数据,而这些数据在移动客户端上可能缺失,或者在预览图片尚未加载时缺失。

预期行为:包含已上传/嵌入图片的帖子应进入媒体审查流程,无论客户端是否发送图片尺寸信息。

建议的修复方案:

  1. 从帖子内容进行服务器端媒体检测 — 通过检查服务器端的 rawcooked 帖子内容(或上传引用)来确定帖子是否包含媒体,而不是仅依赖客户端提供的 image_sizes 字段。

  2. 审查所有上传的媒体文件(优于方案 1) — 不再仅审查帖子中出现的媒体文件,而是直接审查用户上传的所有媒体文件。这完全消除了对帖子级元数据的依赖,并确保无论使用何种客户端或端点,没有任何上传的媒体能绕过审查队列。