Entender as regras de segurança do Firebase para o Cloud Storage

Tradicionalmente, a segurança tem sido uma das partes mais complexas do desenvolvimento de apps. Na maioria dos apps, os desenvolvedores precisam criar e executar um servidor que realize a autenticação (quem o usuário é) e a autorização (o que um usuário pode fazer). A autenticação e a autorização são difíceis de configurar, mais difíceis ainda de otimizar e essenciais para o sucesso do seu produto.

Da mesma maneira que o Firebase Authentication facilita a autenticação dos usuários, as regras de segurança do Firebase para Cloud Storage simplificam a autorização desses usuários e a validação das solicitações. As regras de segurança do Cloud Storage gerenciam a complexidade para que você especifique as permissões com base no caminho. Com apenas algumas linhas de código, você escreve regras de autorização que restringem as solicitações do Cloud Storage a um determinado usuário ou limitam o tamanho de um upload.

O Firebase Realtime Database tem um recurso semelhante, chamado regras de segurança do Firebase Realtime Database.

Authentication

Saber quem são seus usuários é uma parte importante da criação de um app. Com o Firebase Authentication, você tem uma solução específica no lado do cliente para autenticação, fácil de usar e segura. As regras de segurança do Firebase para Cloud Storage estão vinculadas ao Authentication para definir a segurança baseada no usuário. Quando um usuário é autenticado com o Firebase Authentication, a variável request.auth nas regras de segurança do Cloud Storage se torna um objeto que contém o ID exclusivo do usuário (request.auth.uid) e as demais informações do usuário no token (request.auth.token). Quando o usuário não é autenticado, request.auth é null. Isso permite que você controle o acesso aos dados de maneira segura para cada usuário. Saiba mais na seção Autenticação.

Autorização

A identificação do usuário é apenas uma parte do processo de segurança. Uma vez identificado, é preciso ter uma maneira de controlar o acesso dele aos arquivos no Cloud Storage.

O Cloud Storage permite que você especifique regras de autorização por arquivo e por caminho que estejam nos nossos servidores e determine o acesso aos arquivos no seu app. Por exemplo, as regras de segurança padrão do Cloud Storage exigem o Firebase Authentication para executar qualquer operação read ou write em todos os arquivos:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

É possível editar essas regras selecionando um app Firebase no Console do Firebase e visualizando a guia Rules da seção Armazenamento.

Validação de dados

As regras de segurança do Firebase para o Cloud Storage também podem ser usadas para validar dados, incluindo validação do nome e do caminho do arquivo, bem como propriedades de metadados do arquivo, como contentType e size.

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      // Only allow uploads of any image file that's less than 5MB
      allow write: if request.resource.size < 5 * 1024 * 1024
                   && request.resource.contentType.matches('image/.*');
    }
  }
}

Próximas etapas