FixVibe

// docs / baas security / firebase rules scanner

Firebase rules szkenner: nyitott Firestore-, Realtime Database- és Storage-szabályok megtalálása

A Firebase-alkalmazások egyetlen következetes módon buknak el biztonsági szempontból: <code>allow read, write: if true;</code> szabályok maradnak a test-mode quickstart-ból, amelyeket soha nem cserélnek le élesítés előtt. Az MI-kódoló eszközök ezeket a szabályokat szó szerint generálják a dokumentációs példákból, és ritkán kérik a fejlesztőt, hogy megerősítse őket. Ez a cikk megmutatja, hogyan detektál egy Firebase rules szkenner nyitott szabályokat a Firestore-on, a Realtime Database-en és a Cloud Storage-en a projekten kívülről — és hogyan javítsd, amit talál.

Hogyan találja meg a szkenner a nyitott Firebase-szabályokat

A Firebase-szolgáltatások jól ismert, kiszámítható URL-formákat exponálnak. Egy credentialek nélküli szkenner mindegyiket szondázhatja, és megfigyelheti, hogy az anonim olvasások sikerülnek-e. A FixVibe baas.firebase-rules ellenőrzése három független szondázásban fut — egyenként Firebase-szolgáltatásonként:

  • <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. A szkenner a https://[project-id]-default-rtdb.firebaseio.com/.json-t szondázza. Ha a root anonim módon olvasható, a válasz az egész adatbázisfa JSON-ként. Egy konzervatívabb teszt a .json?shallow=true-t kérdezi le, ami csak a felső szintű kulcsokat adja vissza — mindkét esetben találat.
  • Cloud Storage. A szkenner a https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o-t kérdezi le. Ha a válasz fájlneveket listáz hitelesítés nélkül, a bucket anonim módon listázható. A listázható storage találat akkor is, ha az egyedi fájl-letöltéseket megtagadja — a támadók a bucketet enumerálva kitalálható fájlneveket keresnek.

Hogy néz ki valójában a test-mode footgun

A Firebase quickstart dokumentációja az internet egyik legtöbbet másolt szabályblokkját tartalmazza:

firebase
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

A Firebase korábban automatikus 30 napos lejáratot adott ezekhez a szabályokhoz. Ez megváltozott: ma a szabályok örökre fennmaradnak, hacsak a fejlesztő nem cseréli le őket. Az MI-kódoló eszközök — éveken át tanítva a test-mode blokkot tartalmazó dokumentációkon — gyakran szó szerint kiadják, és azt mondják a fejlesztőnek, hogy „ez a biztonsági szabályod". Nem az.

Más változatok, amelyek megjelennek a produkcióban, de ugyanolyan megengedők:

firebase
// 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;
  • Egy jövőbeli időbélyeg-változat: egy szabály, ami mindent megenged egy távoli jövőbeli dátumig. Soha nem jár le hatékonyan (lásd a kiemelt blokkot fent).
  • allow read: if true; allow write: if request.auth != null; — nyilvános olvasások, bármely hitelesített felhasználó tud írni.
  • allow read, write: if request.auth != null; — bármely bejelentkezett felhasználó tud bármely dokumentumot olvasni vagy írni, beleértve más felhasználók adatait is.

Mit tegyél, ha a szkenner nyitott szabályt talál

A nyitott Firebase-szabályok futási idejű vészhelyzetet jelentenek. A fix ugyanaz a forma mind a három szolgáltatáson: szűkíts minden szabályt request.auth.uid-re egy explicit tulajdonos-mező ellen. Mindegyik szolgáltatásnak saját szabály-szintaxisa van:

Firestore

match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Az útvonal-szegmens kötés {userId} lesz az egyetlen dokumentum, amelyhez a felhasználó hozzányúlhat.

firebase
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.

json
{
  "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; } } }. Konvenció: tárold a fájlokat users/[uid]/[filename] alatt, és hagyd, hogy az útvonal érvényesítse a tulajdonjogot.

firebase
service firebase.storage {
  match /b/{bucket}/o {
    match /users/{userId}/{allPaths=**} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}

Deployold a szabályokat a Firebase CLI-vel: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Ellenőrizd, hogy az új szabályok élesben vannak, úgy hogy újra futtatod a FixVibe-szkennelést — a baas.firebase-rules találatnak el kell tűnnie.

bash
firebase deploy --only firestore:rules
firebase deploy --only database
firebase deploy --only storage

Hogyan hasonlítható ez a Firebase beépített eszközeihez

A Firebase Console megmutatja az aktuális szabályokat, de nem auditálja őket a futási viselkedéssel szemben. A Firebase Rules szimulátor lehetővé teszi a szabálylogika tesztelését szintetikus kérések ellen — hasznos, de lokális. Egyik eszköz sem mondja meg, mit ad ténylegesen vissza a produkciós szabályrendszered egy anonim támadónak a nyilvános interneten. Egy külső szkenner, mint a FixVibe (vagy a Burp Suite manuális konfigurációval) az egyetlen, ami ugyanabból a szögből szondáz, ahonnan egy támadó tenné. A Google saját App Check-je csillapítja a visszaélést, de nem helyettesíti a helyesen szűkített szabályokat.

Gyakori kérdések

Olvassa vagy módosítja a szkenner a Firestore-adataimat?

A passzív szkennelések legfeljebb egy anonim olvasást küldenek szolgáltatásonként annak megerősítésére, hogy a szabályok engedélyezik-e. A szkenner rögzíti a válasz formáját és az adatok jelenlétét — nem lapoz, nem enumerál dokumentumokat, és nem ír. Az írási szondák ellenőrzött domain-tulajdonjog mögé vannak korlátozva, és soha nem futnak nem ellenőrzött célpontok ellen.

Mi van, ha a Firebase-projektem App Check-et használ?

Az App Check elutasítja a nem hitelesített kéréseket 403-mal. Egy App Check token nélküli szkenner minden szondán 403-at fog látni — ami a helyes eredmény. Az App Check nem helyettesíti a szabály-helyességet (egy ellopott App Check token plusz egy nyitott szabály még mindig szivárogtat adatokat), de blokkolja az opportunista külső szkenneléseket.

Tudja a szkenner detektálni a részleges szabály-hibakonfigurációkat (olvasás nyitott, írás zárt)?

Igen — mindegyik szabály (allow read, allow write) külön van szondázva. Egy csak olvasásra történő szondázás, ami 200 OK-val sikerül, jelenti a nyitott-olvasás találatot akkor is, ha az írásokat megtagadják. A két találat különálló: az adatkiszivárgás és az adatmanipuláció külön kockázatok.

Működik ez egyedi doménen deployolt Firebase-alkalmazásokra?

Igen. A szkenner a Firebase projekt-azonosítót a deployolt bundle-ből nyeri ki, nem a doménből. Az egyedi domének, az app.web.app aldomének és a saját hostolt Firebase-alkalmazások mind ugyanúgy működnek, amíg a JavaScript-bundle elérhető.

Következő lépések

Futtass egy ingyenes FixVibe-szkennelést az éles URL-edre — a baas.firebase-rules ellenőrzés minden csomagban benne van, és jelzi a nyitott szabályokat a Firestore-on, a Realtime Database-en és a Cloud Storage-en. Konkrétan az allow read, write: if true mintáról mélyebb magyarázatért lásd Firebase allow read, write: if true magyarázat. A Supabase, Firebase, Clerk és Auth0 átfogó áttekintéséért olvasd el a BaaS hibás konfiguráció szkenner cikket.

// szkenneld a baas-felületedet

Találd meg a nyitott táblát, mielőtt más tenné.

Adj meg egy éles URL-t. A FixVibe felderíti a BaaS-szolgáltatókat, amelyekkel az alkalmazásod kommunikál, fingerprinteli a nyilvános végpontjaikat, és jelenti, mit tud egy nem hitelesített kliens olvasni vagy írni. Ingyenes, telepítés nélkül, kártya nélkül.

  • Ingyenes csomag — havi 3 szkennelés, regisztrációhoz kártya nem kell.
  • Passzív BaaS-fingerprinting — nincs szükség domain-ellenőrzésre.
  • Supabase, Firebase, Clerk, Auth0, Appwrite és még több.
  • MI-fix promptok minden találatra — illeszd vissza a Cursorba / Claude Code-ba.
Ingyenes BaaS-szkennelés indítása

regisztráció nem szükséges

Firebase rules szkenner: nyitott Firestore-, Realtime Database- és Storage-szabályok megtalálása — Docs · FixVibe