Ir para o console
Teste o Cloud Firestore: conheça o banco de dados escalonável e flexível do Firebase e do Google Cloud Platform. Saiba mais sobre o Cloud Firestore.

Resolver falhas de segurança

Se você receber um alerta informando que o Firebase Realtime Database não é seguro, poderá resolver essas falhas modificando e testando suas regras do Realtime Database. Use este guia para verificar essas regras, entender possíveis falhas de segurança e testar suas alterações antes de implantá-las.

Revisar suas regras do Realtime Database

Para visualizar suas regras do Realtime Database atuais, acesse a guia Regras no Console do Firebase.

Entender as regras do Realtime Database

As regras do Realtime Database protegem seus dados de um usuário mal-intencionado. Embora seja comum começar a desenvolver com regras abertas que permitem acesso de leitura e gravação a todos os usuários, é importante configurar regras para proteger seus dados antes de implantar o aplicativo. Use o simulador durante a configuração para testar regras diferentes.

Se as regras do Realtime Database são novidade para você, saiba mais sobre o funcionamento delas em Primeiros passos com as regras do Realtime Database.

Resolver falhas de segurança comuns

As regras do Realtime Database que você configurou por padrão ou com as quais trabalhou inicialmente na fase de desenvolvimento podem não ser as melhores regras para o aplicativo implantado. Veja a seguir as armadilhas mais comuns e as possíveis resoluções.

Acesso aberto

Ao configurar o Realtime Database, pode ser que você tenha definido suas regras para permitir acesso aberto durante o desenvolvimento. Se você for o único usuário com acesso ao seu banco de dados, isso poderá parecer seguro. No entanto, se o aplicativo já estiver implantado sem autenticação de usuários, seus dados estarão vulneráveis a usuários mal-intencionados.

Não recomendado: acesso de leitura e gravação a todos os usuários.

{
  "rules": {
    ".read": true,
    ".write": true
  }
}
Solução: regras que restringem o acesso de leitura e gravação. Crie 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 na página Segurança baseada no usuário.

Acesso para qualquer usuário autenticado

Às vezes, as regras do Realtime Database verificam se um usuário está conectado, mas não restringem o acesso com base nessa autenticação. Se uma das suas regras incluir auth !== null, verifique se você quer que qualquer usuário conectado tenha acesso aos dados.

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

{
  "rules": {
      // any logged-in user access your data
      ".read": "auth !== null",
      ".write": "auth !== null"
   }
}
Solução: acesso restrito usando uma variável auth. Ao verificar uma autenticação, talvez também seja interessante usar uma propriedade para restringir ainda mais o acesso de determinados usuários a conjuntos de dados específicos. Saiba mais sobre a variável auth na página Segurança baseada no usuário.

Regras herdadas indevidamente

As regras do Realtime Database são aplicadas em cascata. Assim, regras em caminhos pai mais superficiais substituem regras em nós filhos mais profundos. Ao gravar uma regra em um nó filho, lembre-se de que ela só pode conceder privilégios adicionais. Não é possível refinar ou revogar o acesso aos dados em um caminho mais profundo do seu banco de dados.

Não recomendado: refinar regras em caminhos filhos.

{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Solução: grave regras em caminhos pai que sejam amplos e conceda privilégios mais específicos a caminhos filhos. Se suas necessidades de acesso a dados exigirem mais granularidade, crie regras detalhadas. Saiba mais sobre as regras em cascata do Realtime Database em Como proteger dados.

Acesso fechado

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

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

Essa não é uma opção insegura, mas pode causar a problemas ao lançar seu aplicativo. Saiba mais sobre como configurar e implantar regras do Realtime Database.

Testar suas regras do Realtime Database

Para testar suas regras atualizadas do Realtime Database, use a ferramenta de simulação no Console do Firebase.

  1. Para abrir o simulador, clique em Simulador na guia "Regras".
  2. Nas configurações do Simulador, selecione as opções para o teste, incluindo o seguinte:
    • gravações ou leituras de teste
    • um local específico no seu banco de dados, como um caminho
    • o tipo de autenticação: usuário anônimo autenticado, não autenticado ou um código de usuário específico
  3. Clique em Executar e procure os resultados no banner acima da janela de regras.