Uploads Seguros

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

:dragon: :warning: AQUI HÁ DRAGÕES :warning: :dragon:

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:

  1. Certifique-se de que os uploads S3 estão configurados.
  2. Anote se seu bucket S3 possui uma política de bucket pública. Se tiver, há uma etapa adicional necessária (etapa 4).
  3. 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.
  4. Remova a política de bucket pública do seu bucket se ela estava presente na etapa 1.
  5. 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.
  6. Se quiser que todos os uploads sejam analisados retroativamente e possivelmente marcados como seguros, execute a tarefa rake uploads:secure_upload_analyse_and_update.

:exclamation: Nota sobre a política do bucket S3 :exclamation:

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/meta/ do Discourse.

Permissões e controle de acesso

A URL /secure-uploads/meta/ 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/meta/ 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.

:warning: Se um post de controle de acesso for excluído, o upload anexado não estará mais acessível. :warning:

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 com email_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):

image

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.

51 curtidas