Proteção contra Hot-Link de CDN e Proxy Avatar

Eu odeio perguntas vagas. O que você estava pensando quando pediu por “isso”?

Aqui estão minhas configurações atuais:

Configuração do Discourse:

  • Instalação padrão em um único contêiner
  • Configurado como um subdomínio: forums.domain.tld
  • Configuração padrão do S3 para uploads
  • Uploads são salvos no S3

Configuração do S3:

  • Digital Ocean S3 Bucket
  • Bucket ativado para acesso externo
  • Nenhuma outra camada de segurança ou permissões

Configuração do CDN:

  • bunny CDN
  • Referenciadores permitidos configurados: domain.tld e *.domain.tld
  • A opção que matou o acesso a avatares foi “Bloquear Acesso Direto a Arquivos por URL”.

Quando ativado, todos os avatares recebiam um erro 403. Quando desativado, os avatares apareciam.

Imagens não de Avatar:

  • URL no Discourse: https://cdn.domain.tld/optimized/3X/3/1/filename_#_size.jpeg

Imagens de Avatar:

  • URL no Discourse: https://forums.domain.tld/user_avatar/forums.domain.tld/mazzini/48/776_2.png

Uma postagem anterior, Como os avatares são armazenados e acessados?, indica que o Discourse usa um proxy para avatares. Portanto, a estrutura de URL para avatares não é uma estrutura de URL de imagem padrão.

Dentro do meu sistema, os avatares estão disponíveis no S3 ou no CDN. Isso indica que em algum lugar/de alguma forma o URL do avatar é convertido para um URL do CDN.

Quando isso acontece, o CDN considera o URL um link de acesso direto e bloqueia o acesso com um 403.

Espero ter respondido à pergunta “isso”?