Adicionado na versão 2.4 do Discourse em fevereiro está o recurso de Uploads Seguros, que fornece um nível mais alto de segurança para TODOS os uploads (imagens, vídeos, áudios, textos, PDFs, ZIPs e outros) dentro de uma instância do Discourse.
Pré-requisitos
Você deve ter os uploads S3 ativados em seu site, o que exige que as seguintes configurações sejam preenchidas:
- S3 access key id
- S3 secret access key
- S3 region
- S3 upload bucket
Você também deve estar usando um bucket S3 que não possua uma política de bucket pública e precisa garantir que todos os uploads existentes tenham uma ACL de leitura pública no S3. Consulte a seção “Ativando Uploads Seguros” abaixo.
Após satisfazer esses pré-requisitos, você pode ativar a configuração de site “secure uploads”.
Ativando Uploads Seguros
AQUI HÁ DRAGÕES
![]()
Este é um recurso avançado e o suporte fora do nosso nível Enterprise será limitado. Ative os uploads seguros apenas se você for um usuário experiente.
Para ativar os uploads seguros, você precisa seguir estas etapas:
- Certifique-se de que os uploads S3 estão configurados.
- Anote se seu bucket S3 possui uma política de bucket pública. Se tiver, há uma etapa adicional necessária (etapa 4).
- Execute a tarefa rake
uploads:sync_s3_acls. Isso garantirá que todos os seus uploads tenham a ACL correta no S3. Isso é importante; se você executar a etapa 4 antes disso, alguns uploads podem ficar inacessíveis em seu fórum. - Remova a política de bucket pública do seu bucket se ela estava presente na etapa 1.
- Ative a configuração de site “secure uploads”. Opcionalmente, ative a configuração de site “prevent anons from downloading files” para impedir que usuários anônimos baixem anexos de posts públicos. A partir de agora, qualquer upload poderá ser marcado como seguro dependendo das condições abaixo.
- Se quiser que todos os uploads sejam analisados retroativamente e possivelmente marcados como seguros, execute a tarefa rake
uploads:secure_upload_analyse_and_update.
Nota sobre a política do bucket S3 
Você precisa garantir que o bucket para o qual está fazendo upload não tenha uma política de bucket pública. Uma política de bucket pública terá algo como isto:
{
"Version": "2012-10-17",
"Id": "ComputedBucketPolicy",
"Statement": [
{
"Sid": "AllowWorldRead",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
A parte importante aqui é que estamos permitindo que * obtenha objetos, o que significa permitir que qualquer pessoa baixe qualquer coisa no bucket. Este rótulo também mostrará se a política é pública:
As configurações aqui não devem ser alteradas. Na imagem está o estado ideal para a aba “Block public access”:
O que ele faz
Depois de ativar os Uploads Seguros, qualquer arquivo enviado via Composer será marcado como seguro ou não seguro com base nos seguintes critérios:
- Se você tiver a configuração de site “login required” ativada, todos os uploads serão marcados como seguros e usuários anônimos não poderão acessá-los.
- Se você estiver enviando algo dentro de uma Mensagem Pessoal, ele será marcado como seguro.
- Se você estiver enviando algo dentro de um Tópico que está dentro de uma Categoria privada, ele será marcado como seguro.
O upload no S3 terá uma ACL privada, portanto, links diretos para o arquivo no S3 retornarão um erro 403 de acesso negado. Qualquer e todo acesso a uploads seguros será feito por meio de uma URL assinada do S3. Isso ficará oculto para seus usuários; se um upload for seguro, qualquer referência a ele será feita através da URL /secure-uploads/ do Discourse.
Permissões e controle de acesso
A URL /secure-uploads/ determinará se o usuário atual tem permissão para acessar a mídia e a servirá se tiver. Quando o upload é criado, o post em que ele aparece pela primeira vez será definido como seu “post de controle de acesso” e todas as permissões serão baseadas nesse post.
- Se você tiver a configuração de site “login required” ativada, usuários anônimos sempre receberão um erro 404 ao acessar a URL.
- Ao acessar mídia cujo post de controle de acesso é uma Mensagem Pessoal, o usuário deve fazer parte desse tópico de Mensagem Pessoal para acessar a mídia; caso contrário, o usuário receberá um erro 403.
- Ao acessar mídia cujo post de controle de acesso está dentro de um tópico que está dentro de uma Categoria privada, o usuário deve ter acesso a essa categoria para acessar a mídia; caso contrário, o usuário receberá um erro 403.
Copiar URLs /secure-uploads/ entre Posts e Tópicos é imprudente, pois diferentes usuários terão diferentes níveis de acesso em seus fóruns do Discourse. Novos uploads devem sempre ser criados via Composer. Oneboxes e imagens com hotlink também respeitarão as regras de uploads seguros. Configurações de site, emojis e uploads de temas não são afetados pelos uploads seguros, pois devem ser públicos.
Se um post de controle de acesso for excluído, o upload anexado não estará mais acessível. ![]()
Movendo posts com uploads seguros
Se você mover um “post de controle de acesso” entre diferentes contextos de segurança, o upload anexado pode ser alterado para seguro ou não seguro. Estas são as situações que podem alterar a segurança de um upload:
- Alterar a categoria de um tópico. Percorrerá todos os posts no tópico e atualizará o status de segurança do upload de acordo.
- Alterar um tópico entre ser um tópico público e uma mensagem pessoal. Fará o mesmo que acima.
- Mover posts de um tópico para outro tópico novo ou existente. Executará o mesmo que acima no tópico de destino.
Uploads seguros em e-mails
A incorporação de imagens seguras em e-mails está ativada por padrão. Você pode configurar essas configurações de site para controle adicional:
secure_uploads_allow_embed_images_in_emails: Desative isso para censurar imagens seguras em e-mails.secure_uploads_max_email_embed_image_size_kb: O limite máximo para o tamanho da imagem segura que incorporaremos, padrão de 1 MB, para que o e-mail não fique muito grande. O máximo é 10 MB. Funciona em conjunto comemail_total_attachment_size_limit_kb.
As imagens seguras serão adicionadas como anexos de e-mail e incorporadas usando o formato de URL cid:, pois o suporte a URL base64 em clientes de e-mail ainda é instável.
Se você não tiver secure_uploads_allow_embed_images_in_emails ativado, ou se as imagens começarem a exceder os limites de tamanho, isto é o que você verá no lugar das imagens seguras (também áudio e vídeo seguros que não são incorporados):
![]()
Clientes Hospedados
Neste momento, os uploads seguros estão disponíveis apenas para nossos clientes do plano Enterprise. Por favor, entre em contato conosco para mais detalhes.



