Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Comprendere le regole del database in tempo reale di Firebase

Le regole di sicurezza del database in tempo reale di Firebase determinano chi ha accesso in lettura e scrittura al database, come sono strutturati i dati e quali indici esistono. Queste regole risiedono sui server Firebase e vengono applicate automaticamente in ogni momento. Ogni richiesta di lettura e scrittura sarà completata solo se le tue regole lo consentono. Per impostazione predefinita, le tue regole non consentono a nessuno di accedere al tuo database. Questo serve a proteggere il tuo database da abusi finché non hai il tempo di personalizzare le tue regole o impostare l'autenticazione.

Le regole di sicurezza del database in tempo reale hanno una sintassi simile a JavaScript e sono disponibili in quattro tipi:

Tipi di regole
.leggere Descrive se e quando i dati possono essere letti dagli utenti.
.Scrivi Descrive se e quando è consentita la scrittura dei dati.
.convalidare Definisce l'aspetto di un valore formattato correttamente, se ha attributi figlio e il tipo di dati.
.indexOn Specifica un figlio da indicizzare per supportare l'ordinamento e l'esecuzione di query.

Panoramica sulla sicurezza del database in tempo reale

Firebase Realtime Database fornisce un set completo di strumenti per la gestione della 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 molti altri stack tecnologici. Pertanto, il modo in cui affrontiamo la sicurezza potrebbe essere leggermente diverso da quello a cui sei abituato.

Autenticazione

Un primo passo comune per proteggere la tua app è identificare i tuoi utenti. Questo processo è chiamato autenticazione. È possibile utilizzare l'autenticazione Firebase avere agli utenti di accedere al tuo app. L'autenticazione Firebase include il supporto drop-in per i metodi di autenticazione comuni come Google e Facebook, oltre all'accesso tramite e-mail e password, accesso anonimo e altro.

L'identità dell'utente è un importante concetto di sicurezza. Utenti diversi hanno dati diversi e talvolta hanno capacità diverse. Ad esempio, in un'applicazione di chat, ogni messaggio è associato all'utente che lo ha creato. Gli utenti possono anche essere in grado di eliminare i propri messaggi, ma non i messaggi pubblicati da altri utenti.

Autorizzazione

Identificare il tuo utente è solo una parte della sicurezza. Una volta che sai chi sono, hai bisogno di un modo per controllare il loro accesso ai dati nel tuo database. Le regole di sicurezza del database in tempo reale consentono di controllare l'accesso per ogni utente. Ad esempio, ecco una serie di regole di sicurezza che consente a chiunque di leggere il percorso /foo/ , ma nessuno di scrivere ad esso:

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

.read e .write regole a cascata, per cui questa concede set di regole l'accesso in lettura a tutti i dati nel percorso /foo/ così come i percorsi più profondi, come /foo/bar/baz . Si noti che .read e .write regole meno profonde nella banca dati di override regole più profondi, quindi l'accesso alla lettura /foo/bar/baz sarebbe ancora essere concesso in questo esempio, anche se una regola nel percorso /foo/bar/baz è risultata falsa.

I Realtime database delle regole di sicurezza comprendono built-in variabili e funzioni che consentono di fare riferimento ad altri percorsi, timestamp lato server, le informazioni di autenticazione, e altro ancora. Ecco un esempio di una regola che concede l'accesso in scrittura per gli utenti autenticati a /users/<uid>/ , dove <uid> è l'ID dell'utente ottenuta tramite l'autenticazione Firebase.

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Convalida dei dati

Il database Firebase Realtime è senza schema. Ciò semplifica le modifiche durante lo sviluppo, ma una volta che l'app è pronta per la distribuzione, è importante che i dati rimangano coerenti. Il linguaggio regole include un .validate regola che consente di applicare la logica di convalida utilizzando le stesse espressioni usate per .read e .write regole. L'unica differenza è che le regole di convalida non cascata, in modo che tutti le regole di convalida rilevanti devono valutare a true in modo che la scrittura per essere consentito.

Questi regola rispettare che i dati scritti /foo/ deve essere una stringa inferiore a 100 caratteri:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

Regole di convalida hanno accesso a tutti dello stesso funzioni built-in e le variabili come .read e .write regole. Puoi usarli per creare regole di convalida che siano a conoscenza dei dati altrove nel tuo database, l'identità dell'utente, l'ora del server e molto altro.

Definizione degli indici del database

Il database Firebase Realtime consente di ordinare e interrogare i dati. Per dati di piccole dimensioni, il database supporta query ad hoc, quindi gli indici non sono generalmente necessari durante lo sviluppo. Tuttavia, prima di avviare la tua app, è importante specificare gli indici per tutte le query necessarie per assicurarti che continuino a funzionare man mano che la tua app cresce.

Gli indici vengono specificati utilizzando il .indexOn regola. Ecco un esempio di dichiarazione di indice che indicizzerebbe i campi di altezza e lunghezza per un elenco di dinosauri:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

Prossimi passi