Evita regole insicure

Utilizza questa guida per comprendere le vulnerabilità comuni nelle configurazioni delle regole di sicurezza Firebase, rivedere e proteggere meglio le tue regole e testare le modifiche prima di distribuirle.

Se ricevi un avviso che i tuoi dati non sono adeguatamente protetti, esamina questi errori comunemente commessi e aggiorna eventuali regole vulnerabili.

Accedi alle tue regole di sicurezza Firebase

Per visualizzare le regole esistenti, utilizza la CLI Firebase o la console Firebase. Assicurati di modificare le regole utilizzando lo stesso metodo, in modo coerente, per evitare di sovrascrivere erroneamente gli aggiornamenti. Se non sei sicuro che le regole definite localmente riflettano gli aggiornamenti più recenti, la console Firebase mostra sempre la versione distribuita più recentemente delle tue regole di sicurezza Firebase.

Per accedere alle tue regole dalla console Firebase , seleziona il tuo progetto, quindi vai a Realtime Database , Cloud Firestore o Storage . Fai clic su Regole una volta che ti trovi nel database o nel bucket di archiviazione corretto.

Per accedere alle regole dalla CLI di Firebase, vai al file delle regole annotato nel file firebase.json .

Comprendere le regole di sicurezza di Firebase

Le regole di sicurezza Firebase proteggono i tuoi dati da utenti malintenzionati. Quando crei un'istanza di database o un bucket Cloud Storage nella console Firebase, puoi scegliere di negare l'accesso a tutti gli utenti ( modalità bloccata ) o concedere l'accesso a tutti gli utenti ( modalità test ). Anche se potresti desiderare una configurazione più aperta durante lo sviluppo, assicurati di dedicare del tempo a configurare correttamente le regole e proteggere i dati prima di distribuire l'app.

Mentre sviluppi la tua app e testi diverse configurazioni per le tue regole, utilizza uno degli emulatori Firebase locali per eseguire la tua app in un ambiente di sviluppo locale.

Scenari comuni con regole non sicure

Le regole che potresti aver impostato per impostazione predefinita o quando hai lavorato inizialmente allo sviluppo della tua app dovrebbero essere riviste e aggiornate prima di distribuire la tua app. Assicurati di proteggere adeguatamente i dati dei tuoi utenti evitando le seguenti trappole comuni.

Accesso libero

Durante la configurazione del tuo progetto Firebase, potresti aver impostato le regole per consentire l'accesso aperto durante lo sviluppo. Potresti pensare di essere l'unica persona a utilizzare la tua app, ma se l'hai distribuita, è disponibile su Internet. Se non autentichi gli utenti e non configuri le regole di sicurezza, chiunque indovini il tuo ID progetto può rubare, modificare o eliminare i dati.

Non consigliato: accesso in lettura e scrittura per tutti gli utenti.

Cloud Fire Store

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

Banca dati in tempo reale

{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

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

Archiviazione nel cloud

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
// Warning: This rule makes every file in your Cloud Storage bucket accessible to any user.
// Apply caution before using it in production, since it means anyone
// can overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
Soluzione: regole che limitano l'accesso in lettura e scrittura.

Crea regole che abbiano senso per la tua gerarchia di dati. Una delle soluzioni comuni a questa insicurezza è la sicurezza basata sull'utente con l'autenticazione Firebase. Ulteriori informazioni sull'autenticazione degli utenti con le regole .

Cloud Fire Store

Banca dati in tempo reale

Archiviazione nel cloud

Accesso per qualsiasi utente autenticato

A volte, le regole controllano che un utente abbia effettuato l'accesso, ma non limitano ulteriormente l'accesso in base a tale autenticazione. Se una delle tue regole include auth != null , conferma che desideri che qualsiasi utente connesso abbia accesso ai dati.

Non consigliato: qualsiasi utente connesso ha accesso in lettura e scrittura all'intero database.

Cloud Fire Store

service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

Banca dati in tempo reale

{
  "rules": {
    ".read": "auth.uid !== null",
    ".write": "auth.uid !== null"
  }
}

Archiviazione nel cloud

// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
Soluzione: accesso ristretto utilizzando condizioni di sicurezza.

Quando controlli l'autenticazione, potresti anche voler utilizzare una delle proprietà di autenticazione per limitare ulteriormente l'accesso a utenti specifici per set di dati specifici. Ulteriori informazioni sulle diverse proprietà di autenticazione .

Cloud Fire Store

Banca dati in tempo reale

Archiviazione nel cloud

(Realtime Database) Regole ereditate in modo errato

Le regole di sicurezza del database in tempo reale si susseguono a cascata, con regole su percorsi principali più superficiali che sovrascrivono le regole su nodi secondari più profondi. Quando scrivi una regola su un nodo figlio, ricorda che può solo concedere privilegi aggiuntivi. Non puoi perfezionare o revocare l'accesso ai dati in un percorso più profondo nel tuo database.

Non consigliato: perfezionamento delle regole nei percorsi secondari
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Soluzione: scrivere regole ampie sui percorsi principali e concedere privilegi più specifici sui percorsi secondari. Se le esigenze di accesso ai dati richiedono maggiore granularità, mantenere le regole granulari. Ulteriori informazioni sulla sovrapposizione delle regole di sicurezza del database in tempo reale nella sintassi principale delle regole di sicurezza del database in tempo reale .

Accesso chiuso

Mentre sviluppi la tua app, un altro approccio comune è mantenere i tuoi dati protetti. In genere, ciò significa che hai chiuso l'accesso in lettura e scrittura a tutti gli utenti, come segue:

Cloud Fire Store

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Banca dati in tempo reale

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

Archiviazione nel cloud

// Access to files through Cloud Storage is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage APIs.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

Gli SDK di amministrazione di Firebase e Cloud Functions possono comunque accedere al tuo database. Utilizza queste regole quando intendi utilizzare Cloud Firestore o Realtime Database come backend solo server insieme a Firebase Admin SDK. Sebbene sia sicuro, dovresti verificare che i client della tua app possano recuperare correttamente i dati.

Scopri di più sulle regole di sicurezza di Cloud Firestore e su come funzionano in Introduzione alle regole di sicurezza di Cloud Firestore .

Metti alla prova le tue regole di sicurezza di Cloud Firestore

Per controllare il comportamento della tua app e verificare le configurazioni delle regole di sicurezza di Cloud Firestore, utilizza l' emulatore Firebase . Utilizza l'emulatore Cloud Firestore per eseguire e automatizzare gli unit test in un ambiente locale prima di distribuire eventuali modifiche.

Per convalidare rapidamente le regole di sicurezza Firebase nella console Firebase, utilizza il simulatore di regole Firebase .