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 o tráfego abusivo, tais como ataques de negação de serviço (DoS), configurar o monitoramento e alerta para a Nuvem Firestore , em tempo real banco de dados , armazenamento em nuvem e hospedagem

Se você suspeitar de um ataque à sua aplicação, chegar aos Apoio o mais rápido possível para que eles saibam o que está acontecendo.

Habilitar verificação de aplicativo

Para ajudar a garantir que apenas os aplicativos podem acessar seus serviços de back-end, permitir App verificação para cada serviço que a suporta.

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 a sua aplicação.

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 faturamento , mas você também pode configurar alertas de orçamento em seu projeto para ser notificado quando o uso de recursos está superando 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 esses erros de afetar serviços ao vivo, fazendo o seu desenvolvimento com a suíte emulador Firebase .

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

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

Se você não precisa de apresentar o resultado de uma função em tempo real, você pode atenuar contra o tráfico abusiva pelo processamento dos resultados em lotes: publicar resultados a um Pub / Sub tópico, e processar 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

Chaves usos API Firebase apenas para identificar projecto Firebase do seu aplicativo para serviços Firebase, e não para controlar o acesso a banco de dados ou dados de armazenamento em nuvem, o que é feito usando regras de segurança de 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 um atacante tentando usar sua chave API para solicitações paródia, você pode criar chaves de API escopo para seus clientes de aplicativos .

Manter as chaves do servidor FCM em segredo

Chaves de API ao contrário de serviços Firebase, chaves de servidor FCM (usado pelo legado FCM HTTP API ) são sensíveis e deve ser mantido em segredo.

Mantenha as chaves da conta de serviço em segredo

Também chaves ao contrário API para serviços Firebase, conta de serviço chaves privadas (usados pela administração SDK ) são sensíveis e deve ser mantido 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 são mantendo-se com o desenvolvimento do seu aplicativo, unidade de teste suas regras com a suíte emulador Firebase e adicionar esses testes para o seu pipeline de CI. Veja estas guias para Nuvem Firestore e em tempo real base de dados .

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. Criar JWTs personalizados a partir de um ambiente de confiança, em seguida, passar as fichas para o seu cliente, que usa o token para autenticar ( iOS + , Android , Web , Unity , C ++ ).

Para um exemplo do uso de autenticação personalizado com um fornecedor de terceiros, consulte o post, Authenticate 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 e-mail com senha gerenciada da Firebase, aperte a cota padrão dos identitytoolkit.googleapis.com endpoints para impedir ataques de força bruta. Você pode fazê-lo a partir de página de API do Google Cloud Console .

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

Para segurança extra em sign-in, você pode adicionar suporte a autenticação multi-fator de atualização para Platform Identidade Nuvem . 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ê precisa para persistir dados além de aplicativos é reiniciado em um único dispositivo, converter o usuário para 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, proteger todos os dados não-públicos com regras de segurança que exigem endereços de e-mail verificados sign-in métodos específicos ou .

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, você pode atenuar as consequências de erros e violações por limitar o acesso a dados de produção usando tanto funções predefinidas ou funções do IAM personalizado.

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 watchdog como dependências de desenvolvimento ou teste

Use uma biblioteca, como Snyk para analisar o seu projeto de dependências inseguros.

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

Se você usar o SDK Nuvem Funções logger , você pode monitorar e ser alertado de comportamento incomum, incluindo o 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 em Funções nuvem. 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 Firebase, que são não em segredo , apenas incorporá-los no 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ê está chamando APIs do Google e do Google Cloud que exigem credenciais da conta de serviços, a biblioteca do Google Auth para Node.js pode obter essas credenciais das credenciais padrão de aplicação , que são preenchidos automaticamente em Funções nuvem.
  • Para tornar as chaves privadas e credenciais para serviços não-Google disponíveis para suas funções Nuvem, use Nuvem Segredo Gestor .

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 fazer configurações complexas de lógica ou de ambiente, considere o uso Nuvem Run em vez de Funções nuvem.