絵文字ピッカーはカスタム絵文字のCDN URLを使用していません

説明

標準の絵文字パスはCDN URLに変換されませんが、管理者の絵文字パスは正しく変換されます。

証拠

標準コントローラー(CDN変換なし):

管理者コントローラー(EmojiSerializerを使用した正しい変換):

標準の絵文字パスは、管理者絵文字パスのようにCDN URLに変換されるべきです。

「いいね!」 2

UIでこれらのURLが使用されているのが見えますか?それらがJSアプリでCDN URLに変換されてから表示されるのではないかと疑っています。

絵文字は、レンダリングされた出力でCDN URLではなく、直接S3 URL(//で始まる)を使用していることを確認しました。

これはどのページで表示されますか?

絵文字ピッカーを使用している際に、投稿作成ページでこれを確認できます。カスタム絵文字が読み込まれると、次のようなS3エンドポイントが直接使用されます。

https://assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/1/d/1de8f76096f76cf393640bdcff387ec9ae33dd3e.gif

これは、パスが期待どおりにCDN URLに変換されていないことを示しています。


カスタム絵文字をテスト中 :awthanks:

:up_arrow: これはS3 CDNから配信されています…ピッカー自体に問題があります @j.jaffeux

カスタム絵文字からS3 CDNを使用していません

このUIはS3 CDNを使用しています

したがって、これは絵文字ピッカーに非常に特有な問題です。タイトルを改善します。

「いいね!」 1

これで直るはずです。

「いいね!」 3

カスタム絵文字のCDN利用を可能にしていただきありがとうございます。

フロントエンドの修正により絵文字CDNアドレスが正しくリクエストされていますが、バックエンドのセキュリティについて懸念があります。
https://meta.discourse.org/emojis.json エンドポイントは、依然として //assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/6/1/61e481320406f0f82ed780db3f04056128191613.png のようなS3ソースURLを公開しており、悪意のある乱用や過剰なS3請求につながる可能性があります。

より良いセキュリティのために、カスタム絵文字以外の絵文字が処理されているのと同様に、CDNアドレスを直接返すことをお勧めします。

以下に修正コードの試案を示します。

class EmojisController < ApplicationController
  def index
    emojis = Emoji.allowed.group_by(&:group)
    
    emojis.each do |_, emoji_list|
      emoji_list.each do |emoji|
        emoji.url = Discourse.store.cdn_url(emoji.url) if emoji.url.present?
      end
    end
    
    render json: MultiJson.dump(emojis)
  end
  def search_aliases
    render json: MultiJson.dump(Emoji.search_aliases)
  end
end

はい、emoji.rb でカスタム絵文字以外のものを直接処理していることは承知しており、コントローラーよりもそちらの方が望ましいです。しかし、これが問題を引き起こさないことを確認したいので、今は最も簡単な修正を行いましたが、将来的に詳しく調査します。

「いいね!」 2

元の問題が解決したため、閉じます。フォローアップについては、別の機能リクエストを自由にオープンしてください。

これらのアセットは小さく、一般に公開されているため、リスクは低いと思われます。

「いいね!」 2