Use este guia para entender as vulnerabilidades comuns nas configurações das regras de segurança do Cloud Firestore. Além disso, verifique e proteja melhor suas próprias regras e teste a alterações antes de implantá-las.
Se você receber um alerta de que seu banco de dados do Cloud Firestore não está adequadamente protegido, remova as vulnerabilidades ao modificar e testar suas regras de segurança do Cloud Firestore.
Para ver suas regras de segurança atuais, acesse a guia "Regras" no Console do Firebase.
Entender as regras de segurança do Cloud Firestore
As regras de segurança do Cloud Firestore protegem seus dados contra usuários mal-intencionados. As regras padrão para qualquer instância do Cloud Firestore criadas no Console do Firebase negam acesso a todos os usuários. Para desenvolver seu aplicativo e acessar o banco de dados, será necessário modificar essas regras e conceder acesso geral a todos os usuários em um ambiente de desenvolvimento. Antes de implantar o aplicativo em um ambiente de produção, reserve tempo para configurar corretamente suas regras e proteger seus dados.
Enquanto desenvolve seu app e testa diferentes configurações para suas regras, use o emulador do Cloud Firestore para executar o app em um ambiente de desenvolvimento local.
Cenários comuns com regras não seguras
Revise e atualize, antes da implantação do app, as regras de segurança do Cloud Firestore que talvez você tenha configurado por padrão ou no início do desenvolvimento do seu aplicativo com o Cloud Firestore. Além disso, proteja adequadamente os dados dos usuários evitando as armadilhas comuns vistas a seguir.
Acesso aberto
Ao configurar o Cloud Firestore, você pode ter definido suas regras para permitir acesso aberto durante o desenvolvimento. Você pode pensar que é a única pessoa que usa seu aplicativo. No entanto, se você o implantou, ele está disponível na Internet. Se você não estiver autenticando usuários e configurando regras de segurança, qualquer pessoa que adivinhar seu código de projeto pode roubar, modificar ou excluir os dados.
Não recomendado: acesso de leitura e gravação a todos os usuários. |
// Allow read/write access to all users under any conditions // Warning: **NEVER** use this rule set in production; it allows // anyone to overwrite your entire database. service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }
Solução: regras que restringem 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 com regras. |
Apenas o proprietário do conteúdo
service cloud.firestore { match /databases/{database}/documents { // Allow only authenticated content owners access match /some_collection/{document} { allow read, write: if request.auth != null && request.auth.uid == request.resource.data.author_uid } } }
Acesso público e privado misto
service cloud.firestore { match /databases/{database}/documents { // Allow public read access, but only content owners can write match /some_collection/{document} { allow read: if true allow write: if request.auth != null && request.auth.uid == request.resource.data.author_uid } } }
Acesso para qualquer usuário autenticado
Em alguns casos, as regras de segurança do Cloud Firestore verificam se um usuário está conectado, mas não restringem o acesso com base nessa autenticação. Se uma de suas regras incluir auth != null
, confirme se você quer que qualquer usuário que fez login tenha acesso aos dados.
Não recomendável: qualquer usuário conectado tem acesso de leitura e gravação a todo o banco de dados. |
service cloud.firestore { match /databases/{database}/documents { match /some_collection/{document} { allow read, write: if request.auth != null; } } }
Solução: restrinja o acesso usando as 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 como adicionar condições de segurança e acesso baseado em papéis. |
Acesso baseado na função
service cloud.firestore { match /databases/{database}/documents { // Assign roles to all users and refine access based on user roles match /some_collection/{document} { allow read: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader" allow write: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer" // Note: Checking for roles in your database using `get` (as in the code // above) or `exists` carry standard charges for read operations. } } }
Acesso com base em atributos
// Give each user in your database a particular attribute // and set it to true/false // Then, use that attribute to grant access to subsets of data // For example, an "admin" attribute set // to "true" grants write access to data service cloud.firestore { match /databases/{database}/documents { match /collection/{document} { allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true; allow read: true; } } }
Acesso público e privado misto
service cloud.firestore { match /databases/{database}/documents { // Allow public read access, but only content owners can write match /some_collection/{document} { allow read: if true allow write: if request.auth.uid == request.resource.data.author_uid } } }
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:
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
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 você quiser usar o Cloud Firestore como um back-end somente para servidores junto com o SDK Admin do Firebase. Embora seja seguro, é necessário testar se os clientes do app podem recuperar dados adequadamente.
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.
Verificar as regras de segurança do Cloud Firestore
Para verificar o comportamento do app e as configurações das suas regras de segurança do Cloud Firestore, use o emulador do Cloud Firestore. Use 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 atualizadas do Cloud Firestore no Console do Firebase, use a ferramenta Playground de regras.
- Para abrir o Playground de regras, clique em Playground de regras na guia Regras.
- Nas configurações do Playground de regras, selecione as opções para seu teste, incluindo:
- 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
- dados específicos do documento que suas regras mencionam especificamente (por exemplo, se as regras exigem a presença de um campo específico antes de permitir uma gravação)
- Clique em Executar e procure os resultados no banner acima da janela de regras.