Como restringir a modificação de dados do Firebase?

94

O Firebase fornece back-end de banco de dados para que os desenvolvedores possam se concentrar no código do cliente.

Portanto, se alguém pegar meu uri do firebase (por exemplo https://firebaseinstance.firebaseio.com), desenvolva-o localmente .

Então, eles seriam capazes de criar outro aplicativo fora da minha instância do Firebase, se inscrever e se autenticar para ler todos os dados do meu aplicativo Firebase?

rattanak
fonte

Respostas:

105

@Frank van Puffelen,

Você mencionou o ataque de phishing. Na verdade, existe uma maneira de garantir isso.

Se você fizer login no console do GoogleAPIs API Manager, terá a opção de bloquear o referenciador HTTP do qual seu aplicativo aceitará a solicitação.

  1. visite https://console.developers.google.com/apis
  2. Vá para o seu projeto Firebase
  3. Acesse as credenciais
  4. Em Chaves de API, selecione a chave do navegador associada ao seu projeto Firebase (deve ter a mesma chave que a chave de API que você usa para inicializar seu aplicativo Firebase.)
  5. Em "Aceitar solicitações desses referenciadores HTTP (sites), basta adicionar o URL do seu aplicativo.

Isso deve permitir que apenas o domínio da lista de permissões use seu aplicativo.

Isso também é descrito aqui na lista de verificação de lançamento do firebase: https://firebase.google.com/support/guides/launch-checklist

Talvez a documentação do firebase possa tornar isso mais visível ou bloquear automaticamente o domínio por padrão e exigir que os usuários permitam o acesso.

prufrofro
fonte
2
quando vou ao console de API do Google, não vejo a opção de bloquear o referenciador HTTP A captura de tela será útil. thx
rattanak
Você já tentou seguir as etapas acima? Deve levá-lo ali mesmo. Por razões de segurança, não vou tirar um screencap. Lembre-se de procurar a chave do navegador. boa sorte.
prufrofro de
4
E ao usar o firebase com um aplicativo móvel híbrido, usando uma estrutura como o ionic, como a lista branca pode funcionar? Alguma sugestão?
Dinana de
1
@prufrofro Isso está funcionando bem para você? Estava pensando em fazer a mesma coisa para um aplicativo Android. Eu me pergunto por que o Firebase não cobre isso na seção de segurança.
steliosf
2
@Anand Sim, mas o Firebase não cobre isso na documentação. Por padrão, as chaves são públicas e você deve restringi-las totalmente para uso apenas em um nome de pacote específico e certificado de aplicativo SHA-1. E eu estava me perguntando por que o Firebase não menciona isso. Existe um problema ou algo assim?
steliosf
38

O fato de alguém saber seu URL não é um risco à segurança.

Por exemplo: Não tenho nenhum problema em dizer que meu banco hospeda seu site em bankofamerica.com e fala o protocolo HTTP lá. A menos que você também saiba as credenciais que uso para acessar esse site, saber a URL não adianta nada.

Para proteger seus dados, seu banco de dados deve ser protegido com:

  • regras de validação que garantem que todos os dados estejam de acordo com a estrutura que você deseja
  • regras de autorização para garantir que cada bit de dados só possa ser lido e modificado por usuários autorizados

Tudo isso é abordado na documentação do Firebase sobre segurança e regras , que eu recomendo fortemente.

Com essas regras de segurança em vigor, a única maneira de o aplicativo de outra pessoa acessar os dados em seu banco de dados é copiando a funcionalidade de seu aplicativo, fazendo com que os usuários façam login em seus aplicativos em vez do seu e façam login / leiam / escrevam em seu banco de dados; essencialmente um ataque de phishing. Nesse caso, não há problema de segurança no banco de dados, embora provavelmente seja o momento de envolver algumas autoridades.

Frank van Puffelen
fonte
4
não é bem a resposta que procuro. Deixe-me perguntar de uma maneira diferente. Suponha que eu tenha dado a você este url para meu firebase https://tinderclone.firebaseio.com/e https://tinderclone.firebaseio.com/profiles.json. Eles são banco de dados Firebase real. Dá para desenvolver um aplicativo a partir dele, fazendo um formulário de cadastro e um formulário de login com e-mail. Como meu aplicativo permite que qualquer pessoa se registre por e-mail, depois de se registrar, você conseguiria ler todos os dados? Vou fazer outra pergunta mais tarde. Obrigado
rattanak de
4
Isso depende de como você protege seu banco de dados. A simples adição ".read": falseimpedirá que alguém veja os dados. Você provavelmente deseja permitir um pouco mais do que isso, mas tudo depende do seu caso de uso. A proteção dos dados é abordada na documentação do Firebase sobre Segurança e regras .
Frank van Puffelen de
6

Em relação à lista branca do Auth para aplicativos móveis, onde o nome de domínio não é aplicável, o Firebase tem

1) SHA1 fingerprintpara aplicativos Android e

2) App Store ID and Bundle ID and Team ID (if necessary)para seus aplicativos iOS

que você terá que configurar no console do Firebase.

Com esta proteção, já que a validação não é apenas se alguém tem uma chave API válida, domínio Auth, etc, mas também, é proveniente de nossos aplicativos autorizados e domain name/HTTP referrer in caseda Web .

Dito isso, não precisamos nos preocupar se essa chave de API e outros parâmetros de conexão forem expostos a outras pessoas.

Para mais informações, https://firebase.google.com/support/guides/launch-checklist

Anand
fonte
Perdoe minha ignorância, não sou muito bom com criptografia, mas o Sha1 não está acessível através do seu apk? As pessoas não podem simplesmente copiar o Sha1 também? Não vejo como isso ajuda. Eu ficaria muito feliz em provar o contrário :)
cs guy
Sim. Você certamente pode obter o sha1 de um apk. Mas isso não é algo que você passa como um parâmetro para firebase para validar sua chamada. Ele é obtido pelo firebase em seu nível api-sdk (acredite no tempo de execução do Android). Portanto, você não poderá enviar isso para o firebase como um parâmetro para falsificar a conexão.
Anand,
Usar apenas a impressão digital SHA1 não ajudará em nada a proteger a comunicação do seu aplicativo Android com o Firebase. O SHA1 em si pode ser obtido e copiado facilmente, e a conexão ainda pode ser falsificada usando a Firebase API em vez do SDK. Você deve primeiro atestar seu aplicativo e usar alguma ofuscação de código para ocultar a chave.
FEBRYAN ASA PERDANA