Ir para o console

Evitar regras inseguras

Use este guia para entender as vulnerabilidades comuns nas configurações das regras de segurança do Firebase, verificar e proteger melhor suas próprias regras e testar as alterações antes de implantá-las.

Se você receber um alerta de que seus dados não estão protegidos de modo adequado, analise os erros comuns e atualize as regras que estiverem vulneráveis.

Acessar as regras de segurança do Firebase

Para visualizar as regras atuais, use a Firebase CLI ou o Console do Firebase. Lembre-se de editar as regras usando o mesmo método de maneira consistente para evitar substituir as atualizações por engano. Caso você não tenha certeza de que as regras definidas localmente correspondem às atualizações mais recentes, saiba que o Console do Firebase sempre exibe a versão mais recente implantada das regras de segurança do Firebase.

Para acessar as regras no Console do Firebase, selecione o projeto e navegue até o Database ou o Storage. Clique em Regras quando estiver no banco de dados ou no intervalo correto.

Para acessar suas regras na Firebase CLI, acesse o arquivo de regras mencionado no seu arquivo firebase.json.

Entender as regras de segurança do Firebase

As regras de segurança do Firebase protegem seus dados contra usuários mal-intencionados. Ao criar um banco de dados ou uma instância de armazenamento criada no Console do Firebase, é possível optar por negar o acesso a todos os usuários (modo bloqueado) ou conceder a todos (modo de teste). Apesar de ser recomendável ter uma configuração mais ampla durante o desenvolvimento, não se esqueça de configurar corretamente as regras e proteger os dados antes de implantar o aplicativo.

Quando estiver desenvolvendo o aplicativo e testando diferentes configurações para as regras, use um dos emuladores locais do Firebase para executar o aplicativo em um ambiente de desenvolvimento local.

Cenários comuns com regras não seguras

As regras que você configurou por padrão ou no início do desenvolvimento do aplicativo precisam ser revisadas e atualizadas antes que ele seja implantado. Lembre-se de proteger adequadamente os dados dos usuários, evitando os seguintes erros comuns.

Acesso aberto

Ao configurar o projeto do Firestore, pode ser que você tenha definido as regras para permitir acesso aberto durante o desenvolvimento. Talvez você acredite que é a única pessoa que usa o aplicativo. No entanto, se você o implantou, ele está disponível na Internet. Se você não tiver autenticado usuários e configurado regras de segurança, qualquer pessoa que adivinhar o código do projeto pode roubar, modificar ou excluir os dados.

Não recomendável: acesso de leitura e gravação para todos os usuários.

Cloud Firestore


// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

Realtime Database


{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

  "rules": {
    ".read": true
    ".write": true
  }
}
    

Cloud Storage


// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with Google App Engine, this will also make
// files uploaded via GAE public.
// Warning: This rule makes every file in your storage bucket accessible to any
// user. Apply caution before using it in production, since it means anyone can
// overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
Solução: usar regras que restrinjam o acesso de leitura e gravação.

Desenvolva regras que façam sentido para sua hierarquia de dados. Uma das soluções comuns para essa falha é a segurança baseada no usuário com o Firebase Authentication. Saiba mais sobre como autenticar usuários por meio de regras.

Cloud Firestore

Realtime Database

Cloud Storage

Acesso para qualquer usuário autenticado

Às vezes, as regras verificam se um usuário está conectado, mas não restringem o acesso com base nessa autenticação. Se uma das regras incluir auth != null, verifique se qualquer usuário conectado pode acessar os dados.

Não recomendável: qualquer usuário conectado tem acesso de leitura e gravação a todo o banco de dados.

Cloud Firestore


service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

Realtime Database


{
  "rules": {
    ".read": "auth.uid != null"
    ".write": "auth.uid != null"
  }
}

Cloud Storage


// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
Solução: configurar o acesso restrito por meio de condições de segurança.

Se você fizer a verificação de autenticação, talvez também seja interessante usar uma dessas propriedades para restringir ainda mais o acesso de determinados usuários a conjuntos de dados específicos. Saiba mais sobre as diferentes propriedades de autenticação.

Cloud Firestore

Realtime Database

Cloud Storage

Acesso fechado

Ao desenvolver seu aplicativo, outra abordagem comum é manter seus dados bloqueados. Normalmente, isso significa bloquear o acesso de leitura e gravação a todos os usuários da seguinte maneira:

Cloud Firestore

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Realtime Database

{
  "rules": {
    ".read": false,
    ".write": false
  }
}
    

Cloud Storage

// Access to files through Firebase Storage is completely disallowed.
// Files may still be accessible through Google App Engine or GCS APIs.

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

Os SDKs Admin do Firebase e o Cloud Functions ainda podem acessar seu banco de dados. Use essas regras quando for utilizar o Cloud Firestore ou o Realtime Database como back-end somente de servidor com o SDK Admin do Firebase. Apesar de esse ser um método seguro, teste se os clientes do aplicativo conseguem recuperar dados corretamente.

Saiba mais sobre as regras de segurança do Cloud Firestore e como elas funcionam em Primeiros passos com as regras de segurança do Cloud Firestore.

Testar as regras de segurança do Cloud Firestore

Para verificar o comportamento do seu aplicativo e conferir as configurações de regras de segurança do Cloud Firestore, use o emulador do Firebase. Utilize o emulador do Cloud Firestore para executar e automatizar testes de unidade em um ambiente local antes de implantar as alterações.

Para testar rapidamente as regras de segurança do Firebase no Console do Firebase, use o simulador de regras do Firebase.