// docs / baas security / firebase rules scanner
Scanner di regule Firebase: trova regule aperte di Firestore, Realtime Database, è Storage
L'app Firebase fallenu a sicurezza in un modu cunsistente: <code>allow read, write: if true;</code> regule lasciate da u quickstart di test-mode, mai rimpiazzate prima di a produzzione. L'attrezzi di codifica IA generanu sti regule littaralmente da l'esempii di documentazione è raramente sollecitanu u sviluppatore à indurelle. St'articulu mostra cumu un scanner di regule Firebase rileva regule aperte trà Firestore, Realtime Database, è Cloud Storage da fora di u prughjettu — è cumu curreghje ciò ch'ellu trova.
Cumu u scanner trova regule Firebase aperte
I servizii Firebase espongenu forme d'URL ben cunnisciute è prevedibili. Un scanner senza credenziali pò sundà ognuna è osservà s'è e letture anonime riescenu. U check baas.firebase-rules di FixVibe gira in trè sondaghji indipendenti — unu per serviziu Firebase:
- <strong>Firestore.</strong> The scanner extracts the project ID from the deployed app's bundle (it's in <code>firebase.initializeApp({ projectId: ... })</code>), then issues <code>GET https://firestore.googleapis.com/v1/projects/[project-id]/databases/(default)/documents/[collection]:listDocuments</code> against common collection names. A <code>200 OK</code> with documents in the response means <code>allow read</code> is permissive.
- Realtime Database. U scanner sonda
https://[project-id]-default-rtdb.firebaseio.com/.json. S'è a radica hè leghjibile anonimamente, a risposta hè l'arburu sanu di a basa di dati cum'è JSON. Una pruva più cunservativa interrogheghja.json?shallow=true, chì torna solu e chjavi di livellu sopra — un risultatu in ogni casu. - Cloud Storage. U scanner interrogheghja
https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o. S'è a risposta lista nomi di schedariu senza autenticazione, u bucket hè listabile anonimu. Storage listabile hè un risultatu ancu quandu i scaricamenti individuali di schedariu sò ricusati — l'attaccanti enumeranu u bucket per truvà nomi di schedariu indovinevuli.
Cumu apparisce veramente u footgun di test-mode
A documentazione di quickstart di Firebase include unu di i più cupiati blocchi di regule in internet:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}Firebase aghjunghjia automaticamente una scadenza di 30 ghjorni nantu à sti regule. Quessa hè cambiata: oghje e regule perseveranu per sempre salvu chì u sviluppatore i rimpiazza. L'attrezzi di codifica IA — addestrati nantu à anni di documentazione chì include u bloccu di test-mode — spessu emettenu lu littaralmente è dicenu à u sviluppatore "questa hè a to regula di sicurezza." Ùn hè micca.
Altre varianti chì appariscenu in produzzione ma sò ugualmente permissive:
// future-date variant — equivalent to "if true" allow read, write: if request.time < timestamp.date(2099, 1, 1); // authenticated-user variant — any signed-in user reads and writes anything allow read: if true; allow write: if request.auth != null; // any-auth variant — any signed-in user owns every document allow read, write: if request.auth != null;
- Una variante di timestamp futuru: una regula chì permette tuttu finu à una data luntana in u futuru. Mai effettivamente scade (vedi u bloccu evidenziatu sopra).
allow read: if true; allow write: if request.auth != null;— letture publiche, qualunque utente autenticatu pò scrive.allow read, write: if request.auth != null;— qualunque utente firmatu pò leghje o scrive qualunque documentu, cumpresi i dati d'altri utenti.
Ciò chì fà quandu u scanner trova una regula aperta
Regule Firebase aperte sò una emergenza in runtime. A currezzione hè di listessa forma trà tutti i trè servizii: limita ogni regula à request.auth.uid contru à un campu di patrone esplicitu. Ogni serviziu hà a so propria sintassi di regula:
Firestore
match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. U ligame di segmentu di percorsu {userId} diventa l'unicu documentu chì l'utente pò toccà.
match /users/{userId} {
allow read, write: if request.auth != null
&& request.auth.uid == userId;
}Realtime Database
<code>{ "rules": { "users": { "$uid": { ".read": "$uid === auth.uid", ".write": "$uid === auth.uid" } } } }</code>. The <code>$uid</code> wildcard captures the path segment for comparison.
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}Cloud Storage
service firebase.storage { match /b/{bucket}/o { match /users/{userId}/{allPaths=**} { allow read, write: if request.auth.uid == userId; } } }. Cunvenzione: tene i schedarii sottu à users/[uid]/[filename] è lascia chì u percorsu imponga a pruprietà.
service firebase.storage {
match /b/{bucket}/o {
match /users/{userId}/{allPaths=**} {
allow read, write: if request.auth.uid == userId;
}
}
}Spiega e regule via u CLI di Firebase: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Verifica chì e nove regule sò in produzzione rilampendu a scansione FixVibe — u risultatu baas.firebase-rules deve sparisce.
firebase deploy --only firestore:rules
firebase deploy --only database
firebase deploy --only storageCumu si paragona à l'attrezzi integrati di Firebase
A Cunsola Firebase ti mostra e regule currenti ma ùn auditeghja contru à u cumpurtamentu runtime. U simulatore di regule Firebase ti lascia pruvà a logica di regula contru à richieste sintetiche — utile ma lucale. Nisun di i dui attrezzi ti dice ciò chì e to regule di produzzione veramente tornanu à un attaccante anonimu in l'internet publicu. Un scanner esternu cum'è FixVibe (o Burp Suite cù cunfigurazione manuale) hè l'unica cosa chì sonda da listessu angulu chì un attaccante u faria. U propiu App Check di Google mitigheghja l'abusu ma ùn sustituisce regule currettamente limitate.
Dumande frequenti
U scanner leghje o modifica i mio dati Firestore?
E scansioni passive emettenu al massimu una lettura anonima per serviziu per cunfirmà s'è e regule a permettenu. U scanner registra a forma di a risposta è a presenza di dati — ùn pagina, ùn enumera documenti, è ùn scrive. I sondaghji di scrittura sò gattati daretu à verifica di pruprietà di duminiu è ùn parteranu mai contru à miri micca verificati.
Ciò chì succede s'è u mio prughjettu Firebase usa App Check?
App Check ricusa e richieste micca autenticate cù un 403. Un scanner senza un token App Check vede 403 in ogni sondaghju — chì hè u risultatu currettu. App Check ùn hè micca un sustitutu per a currittezza di e regule (un token App Check rubatu più una regula aperta perdenu sempre dati), ma blocca e scansioni esterne uppurtunistiche.
U scanner pò rileve sbagli di regule parziali (lettura aperta, scrittura chjusa)?
Iè — ogni regula (allow read, allow write) hè sundata separatamente. Un sondaghju di solu lettura chì riesce cù un 200 OK riporta un risultatu di lettura aperta ancu s'è e scritture sò ricusate. I dui risultati sò distinti: l'esfiltrazione di dati è a manipulazione di dati sò risichi separati.
Funziuneghja per l'app Firebase spiegate sottu à un duminiu persunalizatu?
Iè. U scanner estrae l'ID di u prughjettu Firebase da u bundle spiegatu, micca da u duminiu. Duminii persunalizati, subdomini app.web.app, è app Firebase self-hosted funziuneghjanu listessu modu finu chì u bundle JavaScript hè ghjuntu.
Prussimi passi
Lampa una scansione FixVibe gratisa contru à u to URL di produzzione — u check baas.firebase-rules hè in ogni pianu è sgnala regule aperte trà Firestore, Realtime Database, è Cloud Storage. Per una spiegazione più prufonda di u pattern allow read, write: if true in particulare, vedi Firebase allow read, write: if true spiegatu. Per a vista d'imbrelli trà Supabase, Firebase, Clerk, è Auth0, leghji Scanner di sbagli di cunfigurazione BaaS.
