// docs / baas security / firebase rules scanner
Skener pravidel Firebase: najděte otevřená pravidla Firestore, Realtime Database a Storage
Firebase aplikace selhávají v zabezpečení jedním konzistentním způsobem: pravidla <code>allow read, write: if true;</code> zbylá z test-mode quickstartu, nikdy nenahrazená před produkcí. AI nástroje pro kódování generují tato pravidla doslova z dokumentačních příkladů a vývojáře málokdy vyzývají k jejich zpevnění. Tento článek ukazuje, jak skener pravidel Firebase detekuje otevřená pravidla napříč Firestore, Realtime Database a Cloud Storage zvenčí projektu — a jak opravit to, co najde.
Jak skener najde otevřená pravidla Firebase
Služby Firebase vystavují dobře známé, předvídatelné tvary URL. Skener bez přihlašovacích údajů může každý z nich sondovat a pozorovat, zda anonymní čtení uspějí. Kontrola FixVibe baas.firebase-rules probíhá ve třech nezávislých sondách — jedna na službu 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. Skener sonduje
https://[project-id]-default-rtdb.firebaseio.com/.json. Pokud je kořen čitelný anonymně, odpovědí je celý strom databáze jako JSON. Konzervativnější test se ptá.json?shallow=true, který vrací pouze klíče nejvyšší úrovně — v obou případech nález. - Cloud Storage. Skener dotazuje
https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o. Pokud odpověď vypíše názvy souborů bez autentizace, koš je anonymně vypsatelný. Vypsatelné úložiště je nález i tehdy, když jsou jednotlivá stažení souborů odmítnuta — útočníci enumerují koš, aby našli uhodnutelné názvy souborů.
Jak ve skutečnosti vypadá test-mode footgun
Quickstart dokumentace Firebase obsahuje jeden z nejčastěji kopírovaných bloků pravidel na internetu:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}Firebase k těmto pravidlům dříve přidával automatickou 30denní expiraci. To se změnilo: dnes pravidla zůstávají navždy, dokud je vývojář nenahradí. AI nástroje pro kódování — vytrénované na letech dokumentace, která obsahuje test-mode blok — ho často vydávají doslova a říkají vývojáři "toto je vaše bezpečnostní pravidlo". Není.
Další varianty, které se objevují v produkci, ale jsou stejně permisivní:
// 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;
- Varianta s budoucím časovým razítkem: pravidlo, které povoluje vše až do data daleko v budoucnosti. Nikdy efektivně neexpiruje (viz zvýrazněný blok výše).
allow read: if true; allow write: if request.auth != null;— veřejná čtení, jakýkoliv ověřený uživatel může zapisovat.allow read, write: if request.auth != null;— jakýkoliv přihlášený uživatel může číst nebo zapisovat jakýkoliv dokument, včetně dat jiných uživatelů.
Co dělat, když skener najde otevřené pravidlo
Otevřená pravidla Firebase jsou runtime nouzí. Oprava má stejný tvar napříč všemi třemi službami: omezte každé pravidlo na request.auth.uid proti explicitnímu poli vlastníka. Každá služba má vlastní syntax pravidla:
Firestore
match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Vázání segmentu cesty {userId} se stane jediným dokumentem, kterého se uživatel může dotknout.
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; } } }. Konvence: ukládejte soubory pod users/[uid]/[filename] a nechte cestu vynutit vlastnictví.
service firebase.storage {
match /b/{bucket}/o {
match /users/{userId}/{allPaths=**} {
allow read, write: if request.auth.uid == userId;
}
}
}Nasaďte pravidla přes Firebase CLI: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Ověřte, že nová pravidla jsou v produkci, opětovným spuštěním FixVibe skenu — nález baas.firebase-rules by měl zmizet.
firebase deploy --only firestore:rules
firebase deploy --only database
firebase deploy --only storageJak to vychází ve srovnání s vestavěnými nástroji Firebase
Firebase Console vám ukáže aktuální pravidla, ale neauditované je proti runtime chování. Simulátor pravidel Firebase vám umožňuje testovat logiku pravidel proti syntetickým požadavkům — užitečné, ale lokální. Žádný z nástrojů vám neřekne, co vaše produkční pravidla skutečně vracejí anonymnímu útočníkovi na veřejném internetu. Externí skener jako FixVibe (nebo Burp Suite s manuální konfigurací) je jediná věc, která sonduje ze stejného úhlu, ze kterého by sondoval útočník. Vlastní App Check od Google mitigaci zneužití umožňuje, ale nenahrazuje správně omezená pravidla.
Často kladené otázky
Čte nebo upravuje skener moje data Firestore?
Pasivní skeny vydávají maximálně jedno anonymní čtení na službu, aby potvrdily, zda to pravidla povolují. Skener zaznamenává tvar odpovědi a přítomnost dat — nestránkuje, neenumeruje dokumenty a nezapisuje. Sondy zápisu jsou podmíněny ověřeným vlastnictvím domény a nikdy nestřílejí proti neověřeným cílům.
Co když můj Firebase projekt používá App Check?
App Check odmítá neověřené požadavky s 403. Skener bez tokenu App Check uvidí 403 u každé sondy — což je správný výsledek. App Check nenahrazuje správnost pravidel (ukradený token App Check plus otevřené pravidlo stále uniká data), ale blokuje oportunistické externí skeny.
Může skener detekovat částečné chybné konfigurace pravidel (čtení otevřené, zápis uzavřený)?
Ano — každé pravidlo (allow read, allow write) je sondováno samostatně. Sonda pouze pro čtení, která uspěje s 200 OK, hlásí nález otevřeného čtení, i když jsou zápisy odmítnuty. Tyto dva nálezy jsou odlišné: exfiltrace dat a manipulace s daty jsou samostatná rizika.
Funguje to pro aplikace Firebase nasazené pod vlastní doménou?
Ano. Skener vytahuje ID projektu Firebase z nasazeného balíčku, nikoliv z domény. Vlastní domény, subdomény app.web.app a self-hosted Firebase aplikace fungují stejně, dokud je JavaScript balíček dostupný.
Další kroky
Spusťte bezplatný FixVibe sken proti vaší produkční URL — kontrola baas.firebase-rules je dodávána na každém tarifu a hlásí otevřená pravidla napříč Firestore, Realtime Database a Cloud Storage. Pro hlubší vysvětlení specificky vzoru allow read, write: if true viz Firebase allow read, write: if true vysvětleno. Pro zastřešující pohled napříč Supabase, Firebase, Clerk a Auth0 si přečtěte Skener chybných konfigurací BaaS.
