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.
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:
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.