2016-05-27 43 views
166

I firebase Web-App guide stati dovrei mettere la data apikey nel mio Html per inizializzare Firebase:È sicuro esporre Firebase apiKey al pubblico?

// TODO: Replace with your project's customized code snippet 
<script src="https://www.gstatic.com/firebasejs/3.0.2/firebase.js"></script> 
<script> 
    // Initialize Firebase 
    var config = { 
    apiKey: '<your-api-key>', 
    authDomain: '<your-auth-domain>', 
    databaseURL: '<your-database-url>', 
    storageBucket: '<your-storage-bucket>' 
    }; 
    firebase.initializeApp(config); 
</script> 

In questo modo l'apikey è esposto a ogni visitatore. Qual è lo scopo di quella chiave ed è davvero destinato a essere pubblico?

risposta

141

L'API in sostanza identifica semplicemente il progetto Firebase sui server di Google. Non è un rischio per la sicurezza che qualcuno lo sappia. In effetti, è necessario che lo sappiano, in modo che possano interagire con il progetto Firebase.

In questo senso è molto simile all'URL del database che Firebase è stato storicamente utilizzato per identificare il back-end: https://<app-id>.firebaseio.com. Leggi questa domanda sul perché questo non è un rischio per la sicurezza: How to restrict Firebase data modification?, compreso l'uso delle regole di sicurezza lato server di Firebase per garantire che solo gli utenti autorizzati possano accedere ai servizi di back-end.

+2

Quindi significa che altre persone potrebbero accedere a tutti i dati nel database di Firebase? –

+0

Vedere http://stackoverflow.com/questions/35418143/how-to-restrict-firebase-data-modification –

+7

@EmmanuelCampos La risposta è Sì e No. Sì, se si consente o si desidera che le altre persone accedano a tutti i dati in il database. E no, se non vuoi che lo facciano. Il database di Firebase ha regole, regole che controlli – Rexford

25

Basandosi sulle risposte di prufrofro e Frank van Puffelen here, ho messo insieme questa soluzione che non impedisce lo scraping, ma può rendere più difficile l'utilizzo della chiave API.

Attenzione: per ottenere i dati, anche con questo metodo, si può per esempio è sufficiente aprire la console di JS in Chrome e tipo:

firebase.database().ref("/get/all/the/data").once("value", function (data) { 
    console.log(data.val()); 
}); 

Solo le norme di sicurezza del database in grado di proteggere i vostri dati.

Tuttavia, ho ristretto la mia produzione API uso chiave del mio nome di dominio come questo:

  1. https://console.developers.google.com/apis
  2. Seleziona il progetto Firebase
  3. Credenziali
  4. Sotto chiavi API, scegli il tuo Chiave del browser. Esso dovrebbe essere simile a questo: "chiave Browser (auto creato da Google Service)"
  5. In "accettare le richieste provenienti da queste referrer HTTP (siti web)", aggiungere l'URL della tua app (Esempio: projectname.firebaseapp.com/*)

Ora l'applicazione funziona solo con questo nome di dominio. Così ho creato un'altra chiave API che sarà privata per lo sviluppo di localhost.

  1. Fare clic su Crea credenziali> API Key

Questo non è limitato, quindi assicuratevi di mantenerlo privato.

Uso Webpack per creare la mia app di produzione. Per assicurarmi di non pubblicare per sbaglio questa nuova chiave API senza limitazioni, l'ho inserita nel mio index.html proprio come faresti normalmente con la tua chiave API.Poi, dentro il mio file webpack.production.config.js, sostituisce la chiave ogni volta index.html viene copiato nella costruzione di produzione, in questo modo:

plugins: [ 
    new CopyWebpackPlugin([ 
     { 
     transform: function(content, path) { 
      return content.toString().replace("###dev-key###", "###public-key###"); 
     }, 
     from: './index.html' 
     } 
    ]) 
    ] 

Per impostazione predefinita, come detto da Emmanuel Campos, Firebase only whitelists localhost and your Firebase hosting domain.

+0

Questo funziona bene? Stavo pensando di fare la stessa cosa per un'app per Android. Mi chiedo perché Firebase non lo copra nella sezione sicurezza. – MScott

+1

Finora non ho avuto alcun problema, ma probabilmente nessun attacco – now

+2

Questo non è menzionato nella loro guida perché non ti proteggerà dallo scraping. Tutto ciò garantisce che qualcun altro non possa creare un'app Web che utilizza il tuo firebase per leggere (o scrivere) dati, se viene eseguita in un normale browser ben funzionante. – thoutbeckers

5

Non sono convinto di esporre le chiavi di sicurezza/configurazione al client. Non lo chiamerei sicuro, non perché qualcuno possa rubare tutte le informazioni private dal primo giorno, perché qualcuno può fare una richiesta eccessiva, e drenare la tua quota e renderti debitore a Google di un sacco di soldi.

È necessario pensare a molti concetti di limitare le persone non per l'accesso dove non dovrebbero essere, gli attacchi DOS ecc

avrei più preferisco il cliente prima colpirà al server web, ci si mette quale mai prima mano firewall, captcha, cloudflare, sicurezza personalizzata tra client e server, o tra server e firebase e sei a posto. Almeno puoi prima interrompere l'attività sospetta prima che raggiunga Firebase. Avrai molta più flessibilità.

Vedo solo uno scenario di utilizzo ottimale per l'utilizzo della configurazione basata su client per gli usi interni. Ad esempio, hai un dominio interno e sei abbastanza sicuro che gli estranei non possano accedervi, quindi puoi configurare un ambiente come browser -> tipo firebase.

-1

È possibile utilizzare la configurazione remota di Firebase con la quale sarà protetta.

+0

Puoi spiegarci di più? Se im right remote config è per piattaforme mobili. Servono a uno scopo diverso. Come connetteresti la tua app con Firebase in primo luogo –