セキュアメディアが有効になっていると、エクスポートされたレポートをダウンロードできません

エクスポートされたレポートの添付ファイル(集計ページビューでテストしました)は、ファイルにプライベートACLがあるにもかかわらず、セキュアとしてマークされていません。これは、短いURLが署名されていないリンクを指していたため、ダウンロードを防いでいました。uploads:secure_upload_analyse_and_update rakeタスクを実行した後、セキュアとして正しくマークされました(他に3つの投稿/5つのアップロードも見つかりましたが、それらが何であるかを特定できませんでした)。

「いいね!」 1

「エクスポートされたレポート添付ファイル」とは、具体的にどのようなものを指しているのか、説明していただけますか?スクリーンショットのことでしょうか?

「いいね!」 1

申し訳ありませんが、エクスポートが完了したと送信されたpm内のリンクにある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 false および secure_media true を設定していると、レポートをエクスポートしてプライベートメッセージで送信すると、次のようになります。

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 のサイドキックジョブが失敗またはエラーになっている以外に、これが起こる方法はないようです。

いくつかのエラーがありましたが、すべてCleanUpUploadsジョブに関連していました。さらに調査したところ、ジョブは実行されなかったようです(過去2日間で失敗したジョブはありませんでした)。

申し訳ありませんが、これを再現できないため、現時点ではこれ以上できることはあまりありません。

「いいね!」 1