O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Lista de verificação de segurança do Firebase

Para manter os recursos do Firebase e os dados dos usuários protegidos, siga estas diretrizes. Nem todos os itens necessariamente se aplicam aos seus requisitos, mas mantenha-os em mente ao desenvolver seu aplicativo.

Evite tráfego abusivo

Configure o monitoramento e alertas para serviços de back-end

Para detectar tráfego abusivo, como ataques de negação de serviço (DOS), configure o monitoramento e alertas para Cloud Firestore , Realtime Database , Cloud Storage e Hosting

Se você suspeitar de um ataque ao seu aplicativo, entre em contato com o suporte o mais rápido possível para informá-los sobre o que está acontecendo.

Habilitar verificação de aplicativo

Para ajudar a garantir que apenas seus aplicativos possam acessar seus serviços de back-end, ative a Verificação de aplicativos para todos os serviços com suporte.

Configure seu Cloud Functions para escalonar para o tráfego normal

O Cloud Functions é escalonado automaticamente para atender às demandas do seu aplicativo, mas, no caso de um ataque, isso pode significar uma grande conta. Para evitar isso, você pode limitar o número de instâncias simultâneas de uma função com base no tráfego normal para seu aplicativo.

Configure alertas para ser notificado quando os limites estiverem quase atingidos

Se o seu serviço tiver picos de solicitação, geralmente as cotas serão ativadas e automaticamente limitarão o tráfego para o seu aplicativo. Certifique-se de monitorar seu uso e painel de cobrança , mas você também pode definir alertas de orçamento em seu projeto para ser notificado quando o uso de recursos está excedendo as expectativas.

Impedir auto-DOSes: teste as funções localmente com os emuladores

Pode ser fácil fazer o DOS acidentalmente durante o desenvolvimento do Cloud Functions: por exemplo, criando um loop infinito de gravação de gatilho. Você pode evitar que esses erros afetem os serviços ativos fazendo seu desenvolvimento com o pacote de emuladores Firebase .

(E se você mesmo fizer o DOS acidentalmente, desimplante sua função removendo-a de index.js e, em seguida, executando firebase deploy --only functions .)

Onde a resposta em tempo real é menos importante, a estrutura funciona defensivamente

Se você não precisa apresentar o resultado de uma função em tempo real, pode reduzir o tráfego abusivo processando os resultados em lotes: publique os resultados em um tópico Pub / Sub e processe os resultados em intervalos regulares com uma função programada .

Entenda as chaves de API

As chaves de API para serviços do Firebase não são secretas

O Firebase usa chaves de API apenas para identificar o projeto do Firebase do seu aplicativo para os serviços do Firebase, e não para controlar o acesso ao banco de dados ou dados do Cloud Storage, o que é feito usando as regras de segurança do Firebase . Por esse motivo, você não precisa tratar as chaves de API para serviços do Firebase como segredos e pode incorporá-las com segurança ao código do cliente. Saiba mais sobre chaves de API para Firebase .

Configurar escopo de chave de API

Como um impedimento adicional contra a tentativa de um invasor de usar sua chave de API para falsificar solicitações, você pode criar chaves de API com escopo para seus clientes de aplicativos .

Manter as chaves do servidor FCM em segredo

Ao contrário das chaves de API para serviços do Firebase, as chaves do servidor FCM (usadas pela API FCM HTTP legada ) são confidenciais e devem ser mantidas em segredo.

Mantenha as chaves da conta de serviço em segredo

Além disso, ao contrário das chaves de API para serviços do Firebase, as chaves privadas da conta de serviço (usadas pelo SDK Admin ) são confidenciais e devem ser mantidas em segredo.

Regras de segurança

Inicializar regras em produção ou modo bloqueado

Ao configurar o Cloud Firestore, Realtime Database e Cloud Storage, inicialize suas regras de segurança para negar todo o acesso por padrão e adicione regras que concedam acesso a recursos específicos conforme você desenvolve seu aplicativo.

Esta é uma das configurações padrão para novas instâncias do Cloud Firestore (modo de produção) e Realtime Database (modo bloqueado). Escolha esta opção ao configurar uma nova instância de banco de dados.

Para o Cloud Storage, comece com uma configuração de regras de segurança como a seguinte:

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

As regras de segurança são um esquema; adicione regras ao adicionar documentos

Não escreva regras de segurança depois de escrever seu aplicativo, como uma espécie de tarefa de pré-lançamento. Em vez disso, escreva regras de segurança à medida que escreve seu aplicativo, tratando-as como um esquema de banco de dados: sempre que precisar usar um novo tipo de documento ou estrutura de caminho, escreva sua regra de segurança primeiro.

Regras de segurança de teste de unidade com o Emulator Suite; adicione ao CI

Para garantir que suas regras de segurança acompanhem o desenvolvimento do seu aplicativo, teste de unidade suas regras com o pacote de emuladores Firebase e adicione esses testes ao pipeline de CI. Consulte estes guias para Cloud Firestore e Realtime Database .

Autenticação

Autenticação personalizada: crie JWTs de um ambiente confiável (do lado do servidor)

Se você já tem um sistema de login seguro, seja um sistema personalizado ou um serviço de terceiros, pode usar o sistema existente para autenticar com os serviços do Firebase. Crie JWTs personalizados a partir de um ambiente confiável e, em seguida, passe os tokens para seu cliente, que usa o token para autenticar ( iOS , Android , Web , Unity , C ++ ).

Para obter um exemplo de como usar autenticação personalizada com um provedor terceirizado, consulte a postagem do blog Autenticar com Firebase usando Okta .

Autenticação gerenciada: provedores OAuth 2.0 são os mais seguros

Se você usar os recursos de autenticação gerenciada do Firebase, as opções do provedor OAuth 2.0 / OpenID Connect (Google, Facebook, etc.) são as mais seguras. Você deve oferecer suporte a um ou mais desses provedores, se puder (dependendo da sua base de usuários).

Autenticação de e-mail-senha: defina uma cota restrita para o ponto de extremidade de login para evitar ataques de força bruta

Se você usar o serviço de autenticação de senha de e-mail gerenciado do Firebase, reduza a cota padrão dos endpoints identitytoolkit.googleapis.com para evitar ataques de força bruta. Você pode fazer issona página da API no Google Cloud Console .

Faça upgrade para o Cloud Identity Platform para autenticação multifator

Para segurança extra no login, você pode adicionar suporte à autenticação multifator fazendo upgrade para o Cloud Identity Platform . Seu código Firebase Authentication existente continuará funcionando após o upgrade.

Autenticação anônima

Use apenas autenticação anônima para integração quente

Use a autenticação anônima apenas para salvar o estado básico dos usuários antes de eles realmente entrarem. A autenticação anônima não substitui a entrada do usuário.

Converta os usuários para outro método de login se eles quiserem os dados quando perderem o telefone

Os dados de autenticação anônima não persistirão se o usuário limpar o armazenamento local ou trocar de dispositivo. Se você precisar manter os dados além das reinicializações do aplicativo em um único dispositivo, converta o usuário em uma conta permanente .

Use regras de segurança que exijam que os usuários se convertam em um provedor de login ou verifiquem seus e-mails

Qualquer pessoa pode criar uma conta anônima em seu projeto. Com isso em mente, proteja todos os dados não públicos com regras de segurança que exigem métodos de login específicos ou endereços de e-mail verificados .

Por exemplo:

allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;

Gestão ambiental

Configurar projetos de desenvolvimento e preparação

Configure projetos separados do Firebase para desenvolvimento, teste e produção. Não mescle o código do cliente com a produção até que ele seja testado no projeto de teste.

Limitar o acesso da equipe aos dados de produção

Se você trabalha com uma equipe maior, pode mitigar as consequências de erros e violações, limitando o acesso aos dados de produção usando funções predefinidas ou funções personalizadas do IAM.

Se sua equipe usa o pacote de emulador para desenvolvimento, talvez você não precise conceder acesso mais amplo ao projeto de produção.

Gestão de biblioteca

Cuidado com erros de ortografia na biblioteca ou novos mantenedores

Ao adicionar bibliotecas ao seu projeto, preste muita atenção ao nome da biblioteca e seus mantenedores. Uma biblioteca com nome semelhante ao que você pretende instalar pode conter código malicioso.

Não atualize as bibliotecas sem entender as mudanças

Examine os logs de alterações de quaisquer bibliotecas que você usa antes de atualizar. Certifique-se de que a atualização agregue valor e verifique se o mantenedor ainda é uma parte em que você confia.

Instale bibliotecas de watchdog como dependências de desenvolvimento ou teste

Use uma biblioteca como a Snyk para escanear seu projeto em busca de dependências inseguras.

Configure o monitoramento de funções; verifique após as atualizações da biblioteca

Se você usar o SDK do criador de logs do Cloud Functions , poderá monitorar e ser alertado sobre comportamento incomum, incluindo comportamento causado por atualizações da biblioteca.

Segurança do Cloud Function

Nunca coloque informações confidenciais nas variáveis ​​de ambiente do Cloud Function

Freqüentemente, em um aplicativo Node.js auto-hospedado, você usa variáveis ​​de ambiente para conter informações confidenciais, como chaves privadas. Não faça isso no Cloud Functions . Como o Cloud Functions reutiliza ambientes entre as invocações de função, informações confidenciais não devem ser armazenadas no ambiente.

  • Para armazenar chaves de API do Firebase, que não são secretas , basta incorporá-las ao código.
  • Se você estiver usando o SDK Admin do Firebase em um Cloud Function, não precisará fornecer explicitamente as credenciais da conta de serviço, porque o SDK pode adquiri-las automaticamente durante a inicialização.
  • Se você estiver chamando APIs do Google e do Google Cloud que exigem credenciais de conta de serviço, a biblioteca Google Auth para Node.js pode obter essas credenciais das credenciais padrão do aplicativo , que são preenchidas automaticamente no Cloud Functions.
  • Para disponibilizar chaves privadas e credenciais de serviços que não são do Google para o Cloud Functions, use o Cloud Secret Manager .

Criptografar informações confidenciais

Se você não pode evitar passar informações confidenciais para seu Cloud Function, você deve criar sua própria solução personalizada para criptografar as informações.

Funções simples são mais seguras; se você precisa de complexidade, considere o Cloud Run

Tente manter o Cloud Functions o mais simples e compreensível possível. A complexidade em suas funções pode frequentemente levar a bugs difíceis de detectar ou comportamento inesperado.

Se você precisa de configurações complexas de lógica ou ambiente, considere o uso do Cloud Run em vez do Cloud Functions.