Emoji Picker verwendet keine CDN-URLs für benutzerdefinierte Emojis

Beschreibung

Standard-Emoji-Pfade werden nicht in CDN-URLs konvertiert, während Admin-Emoji-Pfade ordnungsgemäß konvertiert werden.

Beweise

Standard-Controller (keine CDN-Konvertierung):

Admin-Controller (korrekte Konvertierung mit EmojiSerializer):

Standard-Emoji-Pfade sollten wie Admin-Emoji-Pfade in CDN-URLs konvertiert werden.

2 „Gefällt mir“

Sehen Sie diese URLs irgendwo in der Benutzeroberfläche? Ich vermute, dass sie in der JS-App in CDN-URLs umgewandelt werden, bevor sie angezeigt werden.

Ich habe nachgesehen und kann bestätigen, dass die Emojis direkt S3-URLs (beginnend mit //) in der gerenderten Ausgabe verwenden, nicht CDN-URLs.

Auf welcher Seite sehen Sie das?

Sie können dies auf der Beitragsverfasserseite sehen, wenn Sie den Emoji-Auswahl verwenden. Wenn benutzerdefinierte Emojis geladen werden, verwenden sie direkt S3-Endpunkte, wie zum Beispiel:

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

Dies zeigt, dass die Pfade nicht wie erwartet in CDN-URLs umgewandelt werden.


Benutzerdefinierte Emoji testen :awthanks:

:up_arrow: Dies wird vom S3-CDN ausgeliefert… Wir haben ein Problem mit dem Picker selbst @j.jaffeux

Verwendet keine benutzerdefinierten Emojis vom S3-CDN

Diese Benutzeroberfläche verwendet das S3-CDN

Dies ist also sehr spezifisch für den Emoji-Picker, Verbesserung des Titels hier.

1 „Gefällt mir“

Danke, das sollte es beheben:

3 „Gefällt mir“

Vielen Dank für Ihren PR, der die CDN-Nutzung für benutzerdefinierte Emojis ermöglicht.

Während Ihre Frontend-Korrektur Emoji-CDN-Adressen korrekt anfordert, mache ich mir Sorgen um die Backend-Sicherheit.
Der Endpunkt https://meta.discourse.org/emojis.json gibt immer noch S3-Quell-URLs wie //assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/6/1/61e481320406f0f82ed780db3f04056128191613.png preis, was potenziell zu böswilligem Missbrauch und übermäßiger S3-Abrechnung führen könnte.

Für bessere Sicherheit schlage ich vor, direkt CDN-Adressen zurückzugeben, ähnlich wie bei nicht benutzerdefinierten Emojis.

Hier ist mein Versuch, den Code zu korrigieren:

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

Ja, ich weiß, dass wir es direkt für nicht benutzerdefinierte Emojis in emoji.rb machen, was ich dem Controller vorziehen würde. Ich möchte sicherstellen, dass dies keine Probleme verursacht, daher habe ich vorerst die einfachste Lösung gefunden, werde mich aber in Zukunft damit befassen.

2 „Gefällt mir“

Schließe, da das ursprüngliche Problem behoben ist. Du kannst gerne eine neue Feature-Anfrage für die Nachverfolgung eröffnen.

Diese Assets sind winzig und im Allgemeinen öffentlich, das Risiko erscheint gering.

2 „Gefällt mir“