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. Com as regras de segurança do Storage, você gerencia esses processos complexos por meio da especificação de 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 do Firebase Realtime Database.

Autenticação

Saber quem são seus usuários é uma parte importante da criação de um app, e o Firebase Authentication oferece uma solução do lado do cliente, fácil de usar e segura, para autenticação. 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 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 Segurança do usuário.

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 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 do 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/.*');
    }
  }
}

Agora que você aprendeu os conceitos básicos sobre o que as regras de segurança do Storage podem fazer, comece a usá-las.