Utilizza questa guida per comprendere le vulnerabilità comuni nelle configurazioni di Cloud Firestore Security Rules, esaminare e proteggere meglio le tue regole e testare le modifiche prima di eseguirne il deployment.
Prompt AI per l'Assistenza AI
Per l'assistenza AI, copia il prompt di seguito nel tuo agente di programmazione AI (come Gemini in Android Studio, Antigravity, Claude Code, Codex e Cursor). Puoi personalizzare il prompt e ripetere l'operazione con l'agente. Visita la pagina Skill dell'agente Firebase per informazioni dettagliate sull'installazione.
Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me write, validate, and deploy Firebase Security Rules to protect my app's Firestore data.
Se ricevi un avviso che ti informa che il tuo database Cloud Firestore non è protetto correttamente, puoi risolvere le vulnerabilità modificando e testando le tue Cloud Firestore Security Rules.
Per visualizzare le regole di sicurezza esistenti, vai alla scheda Regole nella console Firebase.
Comprendi il tuo Cloud Firestore Security Rules
Cloud Firestore Security Rules proteggono i tuoi dati da utenti malintenzionati. Le regole predefinite per qualsiasi istanza Cloud Firestore creata nella console Firebase negano l'accesso a tutti gli utenti. Per sviluppare la tua app e accedere al database, dovrai modificare queste regole e potresti prendere in considerazione la possibilità di concedere l'accesso generale a tutti gli utenti in un ambiente di sviluppo. Tuttavia, prima di eseguire il deployment dell'app in un ambiente di produzione, prenditi il tempo necessario per configurare correttamente le regole e proteggere i dati.
Durante lo sviluppo dell'app e il test di diverse configurazioni per le regole, utilizza l'emulatore Cloud Firestore per eseguire l'app in un ambiente di sviluppo locale.
Scenari comuni con regole non sicure
Le Cloud Firestore Security Rules che potresti aver configurato per impostazione predefinita o durante lo sviluppo iniziale della tua app con Cloud Firestore devono essere esaminate e aggiornate prima di eseguire il deployment dell'app. Assicurati di proteggere adeguatamente i dati degli utenti evitando le seguenti trappole comuni.
Accesso libero
Durante la configurazione di Cloud Firestore, potresti aver impostato le regole in modo da consentire l'accesso aperto durante lo sviluppo. Potresti pensare di essere l'unica persona che utilizza la tua app, ma se ne hai eseguito il deployment, è disponibile su internet. Se non autentichi gli utenti e non configuri le regole di sicurezza, chiunque indovini l'ID progetto può rubare, modificare o eliminare i dati.
| Non consigliato: accesso in lettura e scrittura a tutti gli utenti. |
// Allow read/write access to all users under any conditions // Warning: **NEVER** use this rule set in production; it allows // anyone to overwrite your entire database. service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }
|
Soluzione: regole che limitano l'accesso in lettura e scrittura.
Crea regole che abbiano senso per la tua gerarchia dei dati. Una delle soluzioni più diffuse a questa insicurezza è la sicurezza basata sull'utente con Firebase Authentication. Scopri di più sull'autenticazione degli utenti con le regole. |
Solo proprietario dei contenuti
service cloud.firestore { match /databases/{database}/documents { // Allow only authenticated content owners access match /some_collection/{document} { // Allow reads and deletion if the current user owns the existing document allow read, delete: if request.auth.uid == resource.data.author_uid; // Allow creation if the current user owns the new document allow create: if request.auth.uid == request.resource.data.author_uid; // Allow updates by the owner, and prevent change of ownership allow update: if request.auth.uid == request.resource.data.author_uid && request.auth.uid == resource.data.author_uid; } } }
Accesso pubblico e privato misto
service cloud.firestore { match /databases/{database}/documents { // Allow public read access, but only content owners can write match /some_collection/{document} { // Allow public reads allow read: if true // Allow creation if the current user owns the new document allow create: if request.auth.uid == request.resource.data.author_uid; // Allow updates by the owner, and prevent change of ownership allow update: if request.auth.uid == request.resource.data.author_uid && request.auth.uid == resource.data.author_uid; // Allow deletion if the current user owns the existing document allow delete: if request.auth.uid == resource.data.author_uid; } } }
Accesso per qualsiasi utente autenticato
A volte, Cloud Firestore Security Rules verifica che un utente abbia eseguito l'accesso, ma non limita ulteriormente l'accesso in base a questa autenticazione. Se una delle tue regole include auth != null, conferma che vuoi che qualsiasi utente che ha eseguito l'accesso abbia accesso ai dati.
| Non consigliato: qualsiasi utente che ha eseguito l'accesso dispone dell'accesso in lettura e scrittura all'intero database. |
service cloud.firestore { match /databases/{database}/documents { match /some_collection/{document} { allow read, write: if request.auth != null; } } }
|
Soluzione: limita l'accesso utilizzando le condizioni di sicurezza.
Quando controlli l'autenticazione, potresti anche utilizzare una delle proprietà di autenticazione per limitare ulteriormente l'accesso a utenti specifici per set di dati specifici. Scopri di più sull'aggiunta di condizioni di sicurezza e sull'accesso basato sui ruoli. |
Accesso basato sui ruoli
service cloud.firestore { match /databases/{database}/documents { // Assign roles to all users and refine access based on user roles match /some_collection/{document} { allow read: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader" allow write: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer" // Note: Checking for roles in your database using `get` (as in the code // above) or `exists` carry standard charges for read operations. } } }
Accesso basato su attributi
// Give each user in your database a particular attribute // and set it to true/false // Then, use that attribute to grant access to subsets of data // For example, an "admin" attribute set // to "true" grants write access to data service cloud.firestore { match /databases/{database}/documents { match /collection/{document} { allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true; allow read: true; } } }
Accesso pubblico e privato misto
service cloud.firestore {
match /databases/{database}/documents {
// Allow public read access, but only content owners can write
match /some_collection/{document} {
allow read: if true
allow write: if request.auth.uid == request.resource.data.author_uid
}
}
}
Accesso per indirizzi email non verificati
A volte, Cloud Firestore Security Rules verifica che l'indirizzo email di un utente appartenga a un determinato dominio. Sebbene questa sia generalmente una buona pratica, gli indirizzi email non vengono sempre verificati durante l'accesso, a meno che l'utente non esegua un passaggio aggiuntivo dopo aver ricevuto un'email di verifica. Assicurati di verificare che l'indirizzo email appartenga effettivamente all'utente.
| Non consigliato: qualsiasi utente può accedere con un indirizzo email arbitrario. |
service cloud.firestore { match /databases/{database}/documents { // Allow access based on email domain match /some_collection/{document} { allow read: if request.auth != null && request.auth.email.endsWith('@example.com') } } }
| Soluzione: limita l'accesso solo agli indirizzi email verificati. |
Verifica le email
service cloud.firestore { match /databases/{database}/documents { // Allow access based on email domain match /some_collection/{document} { allow read: if request.auth != null && request.auth.email_verified && request.auth.email.endsWith('@example.com') } } }
Accesso chiuso
Durante lo sviluppo dell'app, un altro approccio comune è mantenere i dati bloccati. In genere, questo significa che hai chiuso l'accesso in lettura e scrittura a tutti gli utenti, come segue:
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
Gli SDK Firebase Admin e Cloud Functions possono comunque accedere al tuo database. Utilizza queste regole se intendi utilizzare Cloud Firestore come backend solo server insieme all'SDK Firebase Admin. Sebbene sia sicuro, devi verificare che i client della tua app possano recuperare correttamente i dati.
Scopri di più su Cloud Firestore Security Rules e su come funziona in Inizia a utilizzare Cloud Firestore Security Rules.
Controlla Cloud Firestore Security Rules
Per controllare il comportamento della tua app e verificare le configurazioni di Cloud Firestore Security Rules, utilizza l'emulatore Cloud Firestore. Utilizza l'emulatore Cloud Firestore per eseguire e automatizzare i test delle unità in un ambiente locale prima di eseguire il deployment di eventuali modifiche.
Per testare rapidamente le Cloud Firestore Security Rules aggiornate nella console Firebase, utilizza lo strumento Rules Playground.

- Per aprire il Playground regole, fai clic su Playground regole nella scheda Regole.
- Nelle impostazioni di Playground delle regole, seleziona le opzioni per il test, tra cui:
- Test di letture o scritture
- Una posizione specifica nel database, come percorso
- Tipo di autenticazione: non autenticato, utente anonimo autenticato o ID utente specifico
- Dati specifici del documento a cui fanno riferimento le regole (ad esempio, se le regole richiedono la presenza di un campo specifico prima di consentire una scrittura)
- Fai clic su Esegui e cerca i risultati nel banner sopra la finestra delle regole.