此 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。这使得媒体审查依赖于客户端提供的预览元数据,而这些数据在移动客户端上可能缺失,或者在预览图片尚未加载时缺失。
预期行为:包含已上传/嵌入图片的帖子应进入媒体审查流程,无论客户端是否发送图片尺寸信息。
建议的修复方案:
-
从帖子内容进行服务器端媒体检测 — 通过检查服务器端的
raw或cooked帖子内容(或上传引用)来确定帖子是否包含媒体,而不是仅依赖客户端提供的image_sizes字段。 -
审查所有上传的媒体文件(优于方案 1) — 不再仅审查帖子中出现的媒体文件,而是直接审查用户上传的所有媒体文件。这完全消除了对帖子级元数据的依赖,并确保无论使用何种客户端或端点,没有任何上传的媒体能绕过审查队列。