摘要
“审查媒体”检查(skip_review_media_groups 站点设置)仅在帖子创建时通过 NewPostManager 执行。编辑操作通过 PostRevisor 进行,后者从不运行媒体检查。因此,用户可以先发布纯文本(通过审查),然后通过编辑添加图片——而该帖子永远不会进入审查队列。
更糟糕的是,如果编辑发生在 editing_grace_period(默认 5 分钟)内,且差异小于 editing_grace_period_max_diff(默认 100 个字符——单个上传图片的 Markdown 行约为 40–60 个字符),则编辑不会创建修订记录,也不会显示铅笔图标,因此该绕过行为在 UI 中完全不可见。
复现步骤
- 配置
skip_review_media_groups,使普通用户(例如 TL0/TL1)不被豁免——包含媒体的帖子应需要审批。
- 作为普通用户,创建一个仅包含文本的帖子。它会被正常批准/发布(无媒体 → 无需审查)。
- 在宽限期内,编辑该帖子并插入一张上传的图片。
预期结果
该帖子(现在包含媒体)应被发送到审查队列,或者至少该编辑应接受与帖子创建时相同的媒体检查。
实际结果
- 该帖子连同图片一起发布,且从未进入审查队列。
- 未创建修订记录,也未显示编辑指示器。
证据(生产实例)
p.version # => 1
PostRevision.where(post_id: p.id).count # => 0
p.created_at # => 2026-07-30 07:33:28 UTC
p.updated_at # => 2026-07-30 07:34:00 UTC
UploadReference.where(target: p).pluck(:created_at)
# => [2026-07-30 07:34:01 UTC]
纯文本文字于 07:33:28 创建,约 32 秒后通过编辑添加图片——无可见编辑历史,无审查。
相关代码
- lib/new_post_manager.rb —
post_needs_approval? 通过 contains_embedded_media? 返回 :contains_media,但这仅对新帖子运行。
- app/models/post_analyzer.rb#embedded_media_count — 媒体计数逻辑。
- PostRevisor — 编辑时没有等效的媒体检查。
建议的修复方案
在 PostRevisor 中也运行 contains_media 检查(当编辑引入媒体且编辑者不在 skip_review_media_groups 中 / 不是工作人员时),为已编辑的帖子排队一个 ReviewablePost。
2 个赞
感谢 @Editor0732 的报告
将通过以下链接修复
我尝试部署了这个 PR,并注意到新帖子和编辑在媒体审核机制上存在不对称性,我想提出这个问题:
带有媒体的新帖子 — ReviewableQueuedPost(发布前审核)
- 帖子根本不会创建;内容会停留在可审核的负载中,直到获得批准
- 作者会在主题页面看到“等待批准”部分(
pending_posts)
- 只有在版主批准后,帖子才会对所有人可见(
perform_approve_post → PostCreator)
- 如果被拒绝,内容将被丢弃——它从未公开过
添加媒体的编辑 — ReviewablePost(先发布,后审核)
- 编辑立即生效;新版本(包括图片)会立即对所有人可见
- 作者没有“审核中”的通知——对于宽限期内的编辑,甚至没有修订记录,因此原始内容在界面上不会留下任何痕迹
- 如果被拒绝,帖子将被删除(
perform_reject_and_delete),可以通过之前的修订版本恢复
担忧之处
按照当前的方法,问题图片会在任何版主采取行动之前公开可见,具体时长取决于审核处理时间。这似乎削弱了 skip_review_media_groups 的整个意义——该设置的描述指出,包含媒体的帖子会“发送给工作人员进行审核”,这读起来像是它们在等待审核期间不应公开。
可能的改进方案
-
将编辑后的内容放入队列,而不是直接应用。(我认为这个更好) 当编辑引入新媒体时,保持帖子不变,通知作者新的编辑正在等待审核,并在版主批准后才将编辑后的内容应用到帖子上——如果被拒绝则丢弃。这尽可能镜像了新帖子的行为。(在实现方面,这需要一种可审核的变体,其批准操作会对现有帖子执行 revise,而不是创建一个新帖子。)
-
当编辑引入新媒体时隐藏帖子,这样只有作者能看到带有“等待批准”通知的帖子,并在批准时使用现有的 perform_approve_and_unhide 操作——ReviewablePost 操作已经支持这一点。
感谢对此进行测试。我同意,整个审核系统并未正确构建以处理“审核/待处理编辑” 
恐怕这是一项更为复杂的任务,需要更多时间来进行规划和处理。