Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

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 ti informa che i tuoi dati non sono adeguatamente protetti, esamina questi errori comunemente commessi e aggiorna le regole vulnerabili.

Accedi alle tue regole di sicurezza Firebase

Per visualizzare le regole esistenti, utilizza la Firebase CLI 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 tue regole definite localmente riflettano gli aggiornamenti più recenti, la console Firebase mostra sempre la versione più recente distribuita 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 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 .

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 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 la tua app.

Mentre sviluppi la tua app e collaudi 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 mentre lavoravi 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 indovina l'ID del tuo 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
  }
}
    

Cloud Storage

// 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 Firebase Authentication. Ulteriori informazioni sull'autenticazione degli utenti con le regole .

Cloud Firestore

Database in tempo reale

Archiviazione nel cloud

Accesso per qualsiasi utente autenticato

A volte, le regole controllano che un utente sia connesso, 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 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 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: restringere 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 nel cloud

(Database in tempo reale) Regole ereditate in modo errato

Le regole del database in tempo reale si sovrappongono, con regole su percorsi padre più superficiali che sovrascrivono le regole su nodi figlio più profondi. Quando scrivi una regola in 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 nei percorsi principali che sono ampi e concedi privilegi più specifici nei percorsi secondari Se le tue esigenze di accesso ai dati richiedono una maggiore granularità, mantieni le regole granulari. Ulteriori informazioni sul collegamento a cascata delle regole del database in tempo reale in Proteggi i tuoi dati .

Accesso chiuso

Mentre sviluppi la tua app, un altro approccio comune è mantenere i tuoi dati bloccati. In genere, questo 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 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 Admin Firebase e Cloud Functions possono ancora 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 nella Guida introduttiva alle regole di sicurezza di Cloud Firestore .

Testa 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 Firebase Emulator . 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 .