Come limitare la modifica dei dati di Firebase?


92

Firebase fornisce il back-end del database in modo che gli sviluppatori possano concentrarsi sul codice lato client.

Quindi, se qualcuno prende il mio firebase uri (ad esempio https://firebaseinstance.firebaseio.com) , sviluppalo localmente .

Quindi, sarebbero in grado di creare un'altra app dalla mia istanza Firebase, registrarsi e autenticarsi per leggere tutti i dati della mia app Firebase?

Risposte:


104

@Frank van Puffelen,

Hai menzionato l'attacco di phishing. In realtà c'è un modo per proteggerlo.

Se accedi alla tua console API Manager di googleAPIs, hai un'opzione per bloccare il referrer HTTP da cui la tua app accetterà la richiesta.

  1. visita https://console.developers.google.com/apis
  2. Vai al tuo progetto Firebase
  3. Vai alle credenziali
  4. In Chiavi API, seleziona la chiave del browser associata al tuo progetto Firebase (dovrebbe avere la stessa chiave della chiave API che utilizzi per inizializzare l'app Firebase).
  5. In "Accetta richieste da questi referrer HTTP (siti web), aggiungi semplicemente l'URL della tua app.

Ciò dovrebbe consentire solo al dominio autorizzato di utilizzare la tua app.

Questo è anche descritto qui nell'elenco di controllo per il lancio di Firebase qui: https://firebase.google.com/support/guides/launch-checklist

Forse la documentazione di Firebase potrebbe renderlo più visibile o bloccare automaticamente il dominio per impostazione predefinita e richiedere agli utenti di consentire l'accesso?


2
quando vado alla console dell'API di Google, non vedo l'opzione per bloccare il referrer HTTP. Lo screenshot sarà utile. thx
rattanak

Hai provato a seguire i passaggi precedenti? Dovrebbe portarti lì. Per motivi di sicurezza, non prenderò uno screencap. Ricordati di cercare la chiave del browser. buona fortuna.
prufrofro

4
Che dire di quando si utilizza Firebase con un'app mobile ibrida, utilizzando un framework come ionic, come può funzionare il white list? Eventuali suggerimenti?
Dinana

1
@prufrofro Va bene per te? Stavo pensando di fare la stessa cosa per un'app Android. Mi chiedo perché Firebase non lo copre nella sezione sulla sicurezza.
steliosf

2
@ Anand Sì, ma Firebase non lo copre nella documentazione. Per impostazione predefinita, le chiavi sono pubbliche e devi limitarle manualmente per l'uso solo in un nome di pacchetto specifico e in un certificato dell'app SHA-1. E mi chiedevo perché Firebase non lo menziona affatto. C'è un problema o qualcosa?
steliosf

38

Il fatto che qualcuno conosca il tuo URL non è un rischio per la sicurezza.

Ad esempio: non ho problemi a dirti che la mia banca ospita il suo sito web su bankofamerica.com e lì parla il protocollo HTTP. A meno che tu non conosca anche le credenziali che utilizzo per accedere a quel sito, conoscere l'URL non ti fa bene.

Per proteggere i tuoi dati, il tuo database dovrebbe essere protetto con:

  • regole di convalida che assicurano che tutti i dati aderiscano alla struttura desiderata
  • regole di autorizzazione per garantire che ogni bit di dati possa essere letto e modificato solo dagli utenti autorizzati

Tutto questo è trattato nella documentazione di Firebase su Sicurezza e regole , che consiglio vivamente.

Con queste regole di sicurezza in atto, l'unico modo in cui l'app di qualcun altro può accedere ai dati nel tuo database è se copia la funzionalità della tua applicazione, chiedi agli utenti di accedere alla loro app anziché alla tua e accedere / leggere da / scrivere a il tuo database; essenzialmente un attacco di phishing. In tal caso non ci sono problemi di sicurezza nel database, anche se probabilmente è tempo di coinvolgere alcune autorità.


4
non proprio la risposta che sto cercando. Lascia che te lo chieda in un modo diverso. Supponiamo che ti abbia dato questo URL al mio Firebase https://tinderclone.firebaseio.com/e https://tinderclone.firebaseio.com/profiles.json. Sono veri e propri database Firebase. Puoi sviluppare un'app da essa, creando un modulo di registrazione e un modulo di accesso con e-mail. Dato che la mia app consente a chiunque di registrarsi con la posta elettronica, dopo la registrazione, saresti in grado di leggere tutti i dati? Ti farò un'altra domanda più tardi. Grazie
rattanak

4
Dipende da come proteggi il tuo database. La semplice aggiunta ".read": falseimpedirà a chiunque di vedere i dati. Probabilmente vorrai consentire un po 'di più, ma tutto dipende dal tuo caso d'uso. La protezione dei dati è trattata nella documentazione di Firebase su Sicurezza e regole .
Frank van Puffelen

6

Per quanto riguarda la white list di autorizzazione per le app mobili, in cui il nome di dominio non è applicabile, Firebase ha

1) SHA1 fingerprintper app Android e

2) App Store ID and Bundle ID and Team ID (if necessary)per le tue app iOS

che dovrai configurare nella console Firebase.

Con questa protezione, poiché la convalida non è solo se qualcuno ha una chiave API valida, un dominio di autenticazione, ecc., Ma proviene anche dalle nostre app autorizzate e domain name/HTTP referrer in casedal Web .

Detto questo, non dobbiamo preoccuparci se queste chiavi API e altri parametri di connessione sono esposti ad altri.

Per ulteriori informazioni, https://firebase.google.com/support/guides/launch-checklist


Perdonate la mia ignoranza, non sono molto bravo con la crittografia ma Sha1 non è accessibile tramite il vostro apk? Le persone non possono semplicemente copiare anche lo Sha1? Non vedo come questo aiuti. Sarei molto felice di provare il contrario :)
cs guy

Sì. Puoi sicuramente ottenere sha1 di un apk. Ma non è qualcosa che passi come parametro a Firebase per convalidare la tua chiamata. È preso da Firebase al suo livello api-sdk (credo dal runtime di Android). Quindi non sarai in grado di inviarlo a Firebase come parametro per falsificare la connessione.
Anand

L'uso della sola impronta digitale SHA1 non aiuterà nulla a proteggere la comunicazione della tua app Android con Firebase. Lo stesso SHA1 può essere ottenuto e copiato facilmente e la connessione può ancora essere falsificata utilizzando l'API Firebase anziché l'SDK. Dovresti prima attestare la tua app e usare un po 'di offuscamento del codice per nascondere la chiave.
FEBBRAIO ASA PERDANA
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.