¿Ves estas URL en alguna parte de la interfaz de usuario? Sospecho que se están convirtiendo en URL de CDN en la aplicación de JavaScript antes de mostrarse.
Puedes ver esto en la página del editor de publicaciones al usar el selector de emojis. Cuando se cargan emojis personalizados, utilizan puntos de conexión S3 directamente, como:
Gracias por tu PR que permite el uso de CDN para emojis personalizados.
Si bien tu solución de frontend solicita correctamente las direcciones CDN de emojis, me preocupa la seguridad del backend.
El endpoint https://meta.discourse.org/emojis.json todavía expone URLs de origen S3 como //assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/6/1/61e481320406f0f82ed780db3f04056128191613.png, lo que podría generar un abuso malicioso y una facturación excesiva de S3.
Para una mayor seguridad, sugiero devolver directamente las direcciones CDN, de manera similar a como se manejan los emojis no personalizados.
Aquí está mi intento de arreglar el código:
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
Sí, sé que lo hacemos directamente para los emojis no personalizados en emoji.rb, lo cual preferiría en lugar del controlador. Quiero asegurarme de que esto no cause problemas, así que por ahora hice la solución más simple, pero investigaré esto en el futuro.