Le regole di sicurezza di Firebase Realtime Database determinano chi ha accesso in lettura e scrittura al tuo come sono strutturati i dati e quali indici esistono. Queste regole sono attive sui server Firebase e vengono applicate automaticamente in qualsiasi momento. Ogni lettura e scrivere la richiesta sarà completata solo se le tue regole lo consentono. Per impostazione predefinita, le tue regole non consentano a nessuno di accedere al tuo database. In questo modo, proteggiamo da abusi finché non avrai il tempo di personalizzare le regole o configurare autenticazione.
Le regole di sicurezza di Realtime Database hanno una sintassi simile a JavaScript e sono disponibili in quattro tipi:
Tipi di regole | |
---|---|
.read | Descrive se e quando gli utenti possono leggere i dati. |
.write | Descrive se e quando è consentito scrivere i dati. |
.convalida | Definisce l'aspetto di un valore formattato correttamente, se ha attributi figlio e il tipo di dati. |
.indexOn | Specifica un asset figlio da indicizzare per supportare l'ordinamento e l'esecuzione di query. |
Panoramica sulla sicurezza di Realtime Database
Firebase Realtime Database fornisce un set completo di strumenti per gestire la sicurezza della tua app. Questi strumenti semplificano l'autenticazione degli utenti, l'applicazione delle autorizzazioni utente e la convalida degli input.
Le app basate su Firebase eseguono più codice lato client rispetto a quelle con molte altre app gli stack tecnologici. Pertanto, il nostro approccio alla sicurezza potrebbe essere diversi da quelli a cui sei abituato.
Autenticazione
Un primo passo comune per proteggere l'app è identificare gli utenti. Questo processo è chiamato autenticazione. Puoi usare Firebase Authentication per consentire agli utenti di accedere alla tua app. Autenticazione Firebase include il supporto diretto per metodi di autenticazione comuni come Google e Facebook, nonché accesso a email e password, accesso anonimo e altro ancora.
L'identità dell'utente è un importante concetto di sicurezza. Utenti diversi hanno dati diversi e, a volte, funzionalità diverse. Ad esempio, in una chat dell'applicazione, ogni messaggio viene associato all'utente che lo ha creato. Gli utenti potrebbero anche essere in grado di eliminare i propri messaggi, ma non quelli pubblicati da altri utenti.
Autorizzazione
L'identificazione dell'utente è solo una parte della sicurezza. Una volta che sai chi sono,
necessitano di un modo per controllarne l'accesso ai dati nel tuo database. Regole di sicurezza di Realtime Database
ti consentono di controllare l'accesso per ogni utente. Ad esempio, di seguito è riportato un insieme
regole di sicurezza che consentono a chiunque di leggere il percorso /foo/
, ma non
una per scriverci:
{ "rules": { "foo": { ".read": true, ".write": false } } }
Le regole .read
e .write
vengono applicate a cascata, quindi questo insieme di regole
Concede l'accesso in lettura a tutti i dati nel percorso /foo/
, nonché a eventuali dati
come /foo/bar/baz
. Tieni presente che .read
e
.write
regole più profonde nel database hanno la precedenza su regole più profonde, quindi
in questo esempio verrà comunque concesso l'accesso in lettura a /foo/bar/baz
anche se una regola nel percorso /foo/bar/baz
è stata valutata come false.
Le regole di sicurezza di Realtime Database includono
variabili integrate
.
e funzioni che ti consentono
fare riferimento ad altri percorsi, timestamp lato server, informazioni di autenticazione,
e altro ancora. Ecco un esempio di regola che concede l'accesso in scrittura
utenti autenticati in /users/<uid>/
, dove <uid> sono
L'ID dell'utente ottenuto tramite Firebase Authentication.
{ "rules": { "users": { "$uid": { ".write": "$uid === auth.uid" } } } }
Convalida dei dati
Firebase Realtime Database è senza schema. In questo modo è facile modificare
durante lo sviluppo, ma quando la tua app è pronta per essere distribuita, è importante che
per mantenere la coerenza. Il linguaggio delle regole include un .validate
che consente di applicare la logica di convalida utilizzando le stesse espressioni utilizzate
per le regole .read
e .write
. L'unica differenza è
che le regole di convalida non vengono applicate a cascata, pertanto tutte le
le regole di convalida devono restituire un valore true per consentire la scrittura.
Queste regole applicano che i dati scritti in /foo/
devono essere una stringa
meno di 100 caratteri:
{ "rules": { "foo": { ".validate": "newData.isString() && newData.val().length < 100" } } }
Le regole di convalida hanno accesso a tutte le stesse funzioni integrate e
come regole .read
e .write
. Puoi utilizzare la modalità
per creare regole di convalida che riconoscano i dati di altre
l'identità dell'utente, il tempo dedicato al server e molto altro ancora.
Definizione degli indici di database
Firebase Realtime Database consente di ordinare ed eseguire query sui dati. Per piccole quantità di dati dimensioni, il database supporta query ad hoc, quindi gli indici in genere non sono richiesta durante lo sviluppo. Prima di lanciare l'app, però, è importante per specificare gli indici per le query, in modo che continuino a funzionare la tua app possa crescere.
Gli indici vengono specificati mediante la regola .indexOn
. Ecco un esempio
dichiarazione di indice che indicizza i campi di altezza e lunghezza per un elenco di
dinosauri:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Passaggi successivi
- Inizia a pianificare lo sviluppo di regole per il tuo database.
- Scopri di più sulla protezione dei dati con le regole di sicurezza.
- Scopri di più su come specificare gli indici utilizzando le regole.