Emoji Picker não está usando URLs CDN para emojis personalizados

Descrição

Os caminhos de emoji padrão não são convertidos em URLs de CDN, enquanto os caminhos de emoji de administrador são convertidos corretamente.

Evidência

Controlador padrão (sem conversão de CDN):

Controlador de administrador (conversão correta usando EmojiSerializer):

Os caminhos de emoji padrão devem ser convertidos em URLs de CDN como os caminhos de emoji de administrador.

2 curtidas

Você vê esses URLs sendo usados em algum lugar na interface do usuário? Suspeito que eles estejam sendo convertidos em URLs de CDN no aplicativo JS antes de serem exibidos.

Verifiquei e confirmo que os emojis usam URLs S3 diretamente (começando com //) na saída renderizada, não URLs de CDN.

Em qual página você vê isso?

Você pode ver isso na página do compositor de posts ao usar o seletor de emojis. Quando os emojis personalizados são carregados, eles usam endpoints S3 diretamente, como:

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

Isso mostra que os caminhos não estão sendo convertidos para URLs de CDN como esperado.


Testando emoji personalizado :awthanks:

:up_arrow: isso está sendo enviado da CDN S3… Temos um problema com o próprio seletor @j.jaffeux

Não está usando a CDN S3 para emojis personalizados

Esta interface está usando a CDN S3

Portanto, isso é muito específico para o seletor de emojis, melhorando o título aqui.

1 curtida

Obrigado, isso deve resolver:

3 curtidas

Obrigado pela sua PR que permite o uso de CDN para emojis personalizados.

Embora a sua correção de frontend solicite corretamente os endereços da CDN de emojis, estou preocupado com a segurança do backend.
O endpoint https://meta.discourse.org/emojis.json ainda expõe URLs de origem S3 como //assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/6/1/61e481320406f0f82ed780db3f04056128191613.png, o que pode levar a abusos maliciosos e cobranças excessivas de S3.

Para uma melhor segurança, sugiro retornar diretamente os endereços da CDN, semelhante a como os emojis não personalizados são tratados.

Aqui está minha tentativa de corrigir o 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

Sim, eu sei que fazemos isso diretamente para emojis não personalizados em emoji.rb, o que eu prefiro em vez do controller. Quero garantir que isso não cause problemas, então fiz a correção mais simples por enquanto, mas vou investigar isso no futuro.

2 curtidas

Fechando porque o problema original foi corrigido, sinta-se à vontade para abrir outra solicitação de recurso para o acompanhamento.

Esses recursos são pequenos e geralmente públicos, o risco parece baixo.

2 curtidas