启用安全媒体时无法下载导出的报告

导出的报告附件(我用合并页面视图进行了测试)未被标记为安全,尽管文件具有私有 ACL,这会阻止下载,因为短 URL 指向一个未签名的链接。运行 uploads:secure_upload_analyse_and_update rake 任务后,它被正确标记为安全(还有 3 个其他帖子/5 个上传也被发现,但我无法确定它们是什么)。

1 个赞

您能澄清一下您说的“导出的报告附件”是什么意思?截图?

1 个赞

抱歉,我指的是在发送的私信中链接的 ZIP 文件,因为导出已完成。

1 个赞

这很奇怪,如果我在一个安全的媒体网站上尝试这样做,上传会被正确标记为安全。您能像这样显示上传记录,然后再试一次吗?

#<Upload:0x0000556ae80c5208
 id: 532362,
 user_id: 1436,
 original_filename: "consolidated-page-views-220318-031153-54.zip",
 filesize: 480,
 width: nil,
 height: nil,
 url: "//blah.zip",
 created_at: Fri, 18 Mar 2022 03:11:53.556489000 UTC +00:00,
 updated_at: Fri, 18 Mar 2022 03:11:53.842038000 UTC +00:00,
 sha1: "12345",
 origin: nil,
 retain_hours: nil,
 extension: "zip",
 thumbnail_width: nil,
 thumbnail_height: nil,
 etag: "12345",
 secure: true,
 access_control_post_id: 377702,
 original_sha1: "12345",
 verification_status: 1,
 animated: nil,
 security_last_changed_at: Fri, 18 Mar 2022 03:11:53.836860000 UTC +00:00,
 security_last_changed_reason: "login is required | source: post creator"
>

您的网站需要登录吗?

1 个赞

无需登录

#<Upload:0x000055646d495a30
 id: 62749,
 user_id: 1,
 original_filename: "web-crawlers-220318-032906-26.zip",
 filesize: 3017,
 width: nil,
 height: nil,
 url:
  "//[nope].storage.googleapis.com/original/3X/6/7/679649f9c6d33541cf5f5d2c48c2ef514bde36a0.zip",
 created_at: Fri, 18 Mar 2022 03:29:07.114686000 UTC +00:00,
 updated_at: Fri, 18 Mar 2022 03:29:07.328592000 UTC +00:00,
 sha1: "679649f9c6d33541cf5f5d2c48c2ef514bde36a0",
 origin: nil,
 retain_hours: nil,
 extension: "zip",
 thumbnail_width: nil,
 thumbnail_height: nil,
 etag: "54f0df6d95a84d04877aa20f238c3b1e",
 secure: false,
 access_control_post_id: 214238,
 original_sha1: "5cc4f437505ae3a07bdd27bbe2653462de31db6d",
 verification_status: 1,
 animated: nil,
 security_last_changed_at: Fri, 18 Mar 2022 03:29:07.112534000 UTC +00:00,
 security_last_changed_reason: "no checks satisfied | source: upload creator">

我们的 secure_media 网站设置仅针对 AWS S3 进行验证。这可能是问题所在。

1 个赞

奇怪的部分是:

security_last_changed_reason: "no checks satisfied | source: upload creator"

对我来说,在我的站点设置中,login_required falsesecure_media true,当我导出报告并将其通过 PM 发送给我时,我会得到这个:

security_last_changed_reason: "access control post dictates security | source: post creator"

这很有意义,因为 PM 的帖子创建者附加了上传文件,并且在那时它应该被设置为 secure: true。您的上传记录上有一个 access_control_post_id,但它似乎没有正确工作?

如果您执行 Post.find(214238).with_secure_media? 会发生什么?

我认为这不应该影响它,这只会影响 ACL,我认为。

1 个赞

这是否不适用于所有可能安全的上传?考虑到在私有主题和其他 PM 中发布的帖子没有这个问题,我对此不确定。

=> true

嗯……不确定这里发生了什么

奇怪的是,如果我在 PostCreator(由导出作业调用)中添加一个断点,我一开始会得到一个与你相似的上传结果:

  secure: false,
  access_control_post_id: 67115,
...
  security_last_changed_at: Fri, 18 Mar 2022 04:14:42.292485000 UTC +00:00,
  security_last_changed_reason: "no checks satisfied | source: upload creator"

但随后,一旦发生 PostCreator 对安全状态的更新,一切就都正常了:

 secure: true,
 access_control_post_id: 67115,
...
 security_last_changed_at: Fri, 18 Mar 2022 04:14:55.645303000 UTC +00:00,
 security_last_changed_reason: "access control post dictates security | source: post creator"

Discourse.store.external? 对你返回 true 吗?

  def update_uploads_secure_status(source:)
    if Discourse.store.external?
      Jobs.enqueue(:update_post_uploads_secure_status, post_id: self.id, source: source)
    end
  end

它确实有,我看不到任何正在运行或计划中的 sidekiq 作业,所以我认为它要么失败了,要么从未运行过。

我感到很困惑 :thinking: 您的 /logs 页面有什么可能与此相关吗?这似乎是唯一可能导致这种情况发生的方式,那就是 update_post_uploads_secure_status 这个 sidekiq 作业失败或出错。

出现了一些错误,但都与 CleanUpUploads 作业有关。经过进一步调查,似乎该作业从未运行(过去 2 天没有失败的作业)。

抱歉,我无法重现此问题,因此目前我们对此无能为力。

1 个赞