获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Evita regole insicure

Usa 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 implementarle.

Se ricevi un avviso che indica che i tuoi dati non sono adeguatamente protetti, esamina questi errori comuni e aggiorna le regole vulnerabili.

Accedi alle tue regole di sicurezza Firebase

Per visualizzare le regole esistenti, utilizza l'interfaccia a riga di comando di Firebase o la console di 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ù di recente delle regole di sicurezza Firebase.

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

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

Comprendi le regole di sicurezza di Firebase

Le regole di sicurezza di Firebase proteggono i tuoi dati da utenti malintenzionati. Quando crei un'istanza del database o un bucket di 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à di test ). Anche se potresti volere una configurazione più aperta durante lo sviluppo, assicurati di dedicare del tempo a configurare correttamente le tue regole e proteggere i tuoi dati prima di distribuire l'app.

Mentre stai sviluppando la tua app e testando diverse configurazioni per le tue regole, usa uno degli emulatori Firebase locali per eseguire la tua app in un ambiente di sviluppo locale.

Scenari comuni con regole insicure

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 insidie ​​comuni.

Accesso libero

Durante la configurazione del progetto Firebase, potresti aver impostato le regole per consentire l'accesso aperto durante lo sviluppo. Potresti pensare di essere l'unica persona che utilizza la tua app, ma se l'hai distribuita, è disponibile su Internet. Se non stai autenticando gli utenti e configurando 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 Firestore

// 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;
    }
  }
}

Database 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 su 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 Firestore

Database in tempo reale

Archiviazione su 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 che ha effettuato l'accesso ha accesso in lettura e scrittura all'intero database.

Cloud Firestore

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

Database in tempo reale

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

Archiviazione su 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: limitare l'accesso utilizzando le 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 Firestore

Database in tempo reale

Archiviazione su cloud

(Database in tempo reale) Regole ereditate in modo improprio

Regole del database in tempo reale a cascata, con regole in percorsi padre più superficiali che sovrascrivono le regole in nodi figlio più profondi. Quando scrivi una regola su un nodo figlio, ricorda che può solo concedere privilegi aggiuntivi. Non è possibile perfezionare o revocare l'accesso ai dati in un percorso più profondo nel database.

Non consigliato: perfezionamento delle regole nei percorsi figlio
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Soluzione: scrivi regole ampi sui percorsi principali e concedi privilegi più specifici ai percorsi secondari Se le tue esigenze di accesso ai dati richiedono maggiore granularità, mantieni le regole granulari. Scopri di più sulle regole del database in tempo reale a cascata in Proteggi i tuoi dati .

Accesso chiuso

Durante lo sviluppo della tua app, un altro approccio comune è mantenere i tuoi dati bloccati. In genere, ciò significa che hai chiuso l'accesso in lettura e scrittura a tutti gli utenti, come segue:

Cloud Firestore

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

Database in tempo reale

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

Archiviazione su 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 Firebase e le funzioni cloud possono comunque accedere al tuo database. Utilizza queste regole quando intendi utilizzare Cloud Firestore o Realtime Database come back-end 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 .

Testa le 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 qualsiasi modifica.

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