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.


ADVANCED thing, not for the faint of
, and there is a limit to how much we will support it outside our enterprise tier. Bring your own expertise…
