FixVibe

// docs / baas security / firebase rules scanner

Skener Firebase pravila: pronađite otvorena Firestore, Realtime Database i Storage pravila

Firebase aplikacije ne uspijevaju u sigurnosti na jedan konzistentan način: <code>allow read, write: if true;</code> pravila preostala iz test-mode quickstarta, nikada zamijenjena prije produkcije. AI alati za kodiranje generiraju ova pravila doslovno iz primjera dokumentacije i rijetko podstiču developera da ih otvrdne. Ovaj članak pokazuje kako skener Firebase pravila detektuje otvorena pravila u Firestoreu, Realtime Databaseu i Cloud Storageu izvan projekta — i kako popraviti ono što pronađe.

Kako skener pronalazi otvorena Firebase pravila

Firebase servisi izlažu poznate, predvidljive URL oblike. Skener bez akreditiva može ispitati svaki i posmatrati da li anonimna čitanja uspijevaju. FixVibe-ova provjera baas.firebase-rules radi u tri nezavisne probe — jedna po Firebase servisu:

  • <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 ispituje https://[project-id]-default-rtdb.firebaseio.com/.json. Ako je korijen anonimno čitljiv, odgovor je cijelo stablo baze kao JSON. Konzervativniji test upituje .json?shallow=true, što vraća samo ključeve na najvišem nivou — i jedno i drugo je nalaz.
  • Cloud Storage. Skener upituje https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o. Ako odgovor lista imena fajlova bez autentifikacije, bucket je anon-listable. Listable storage je nalaz čak i kada su preuzimanja pojedinačnih fajlova zabranjena — napadači nabrajaju bucket da pronađu nazive koji se mogu pogoditi.

Kako footgun test-modea zaista izgleda

Firebase quickstart dokumentacija uključuje jedan od najkopiranijih blokova pravila na internetu:

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

Firebase je nekada dodavao automatski 30-dnevni istek na ova pravila. To se promijenilo: danas pravila ostaju zauvijek osim ako ih developer ne zamijeni. AI alati za kodiranje — trenirani na godinama dokumentacije koja uključuje test-mode blok — često emituju ga doslovno i govore developeru "ovo je vaše sigurnosno pravilo". To nije.

Druge varijante koje se pojavljuju u produkciji, ali su jednako permisivne:

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;
  • Varijanta sa budućim timestampom: pravilo koje dozvoljava sve do datuma daleko u budućnosti. Nikad efektivno ne istječe (vidi istaknuti blok iznad).
  • allow read: if true; allow write: if request.auth != null; — javna čitanja, svaki autenticirani korisnik može pisati.
  • allow read, write: if request.auth != null; — svaki prijavljeni korisnik može čitati ili pisati bilo koji dokument, uključujući podatke drugih korisnika.

Šta uraditi kada skener pronađe otvoreno pravilo

Otvorena Firebase pravila su runtime hitnost. Popravak je istog oblika u sva tri servisa: ograničite svako pravilo na request.auth.uid u odnosu na eksplicitno polje vlasnika. Svaki servis ima svoju sintaksu pravila:

Firestore

match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Vezivanje segmenta putanje {userId} postaje jedini dokument kojeg korisnik može dotaći.

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; } } }. Konvencija: čuvajte fajlove pod users/[uid]/[filename] i neka putanja primjenjuje vlasništvo.

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

Deployujte pravila preko Firebase CLI: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Provjerite jesu li nova pravila u produkciji ponovnim pokretanjem FixVibe skena — nalaz baas.firebase-rules trebao bi nestati.

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

Kako se ovo poredi s Firebase-ovim ugrađenim alatima

Firebase konzola vam pokazuje trenutna pravila, ali ih ne auditira u odnosu na runtime ponašanje. Simulator Firebase pravila omogućava testiranje logike pravila u odnosu na sintetičke zahtjeve — korisno, ali lokalno. Nijedan alat vam ne govori šta vaša produkcijska pravila zapravo vraćaju anonimnom napadaču na javnom internetu. Eksterni skener poput FixVibe-a (ili Burp Suite uz ručnu konfiguraciju) jedina je stvar koja ispituje iz istog ugla iz kojeg bi napadač. Google-ov vlastiti App Check ublažava zloupotrebu, ali ne zamjenjuje ispravno ograničena pravila.

Često postavljana pitanja

Hoće li skener čitati ili mijenjati moje Firestore podatke?

Pasivni skenovi izdaju najviše jedno anonimno čitanje po servisu da bi potvrdili dozvoljavaju li to pravila. Skener bilježi oblik odgovora i prisustvo podataka — ne paginira, ne nabraja dokumente i ne piše. Probe pisanja su uvjetovane verificiranim vlasništvom domene i nikada se ne pokreću prema neverificiranim ciljevima.

Šta ako moj Firebase projekat koristi App Check?

App Check odbija neautenticirane zahtjeve s 403. Skener bez App Check tokena vidjet će 403 na svakoj probi — što je ispravan ishod. App Check nije zamjena za ispravnost pravila (ukraden App Check token plus otvoreno pravilo i dalje cure podaci), ali blokira oportunističke eksterne skenove.

Može li skener detektovati djelimične pogrešne konfiguracije pravila (otvoreno čitanje, zatvoreno pisanje)?

Da — svako pravilo (allow read, allow write) ispituje se zasebno. Read-only proba koja uspije s 200 OK prijavljuje nalaz otvorenog čitanja čak i ako su pisanja zabranjena. Ova dva nalaza su različita: eksfiltracija podataka i manipulacija podataka su zasebni rizici.

Radi li ovo za Firebase aplikacije deploy-ane pod prilagođenom domenom?

Da. Skener izvlači Firebase project ID iz deploy-anog bundlea, ne iz domene. Prilagođene domene, app.web.app poddomene i samohostovane Firebase aplikacije sve rade na isti način dokle god je JavaScript bundle dostupan.

Sljedeći koraci

Pokrenite besplatan FixVibe sken prema svom produkcijskom URL-u — provjera baas.firebase-rules isporučuje se u svakom paketu i flegira otvorena pravila u Firestoreu, Realtime Databaseu i Cloud Storageu. Za detaljnije objašnjenje obrasca allow read, write: if true specifično, pogledajte Firebase allow read, write: if true objašnjeno. Za pregled iz ptičje perspektive za Supabase, Firebase, Clerk i Auth0, pročitajte Skener BaaS pogrešnih konfiguracija.

// skenirajte svoju baas površinu

Pronađite otvorenu tabelu prije nego što to neko drugi učini.

Ubacite produkcijski URL. FixVibe nabraja BaaS providere s kojima vaša aplikacija razgovara, fingerprintira njihove javne endpointe i prijavljuje šta neautenticirani klijent može čitati ili pisati. Besplatno, bez instalacije, bez kartice.

  • Besplatni paket — 3 skena mjesečno, bez kartice pri registraciji.
  • Pasivno BaaS fingerprintiranje — bez potrebe za verifikacijom domene.
  • Supabase, Firebase, Clerk, Auth0, Appwrite i još mnogo toga.
  • AI prompti za popravak na svakom nalazu — zalijepite nazad u Cursor / Claude Code.
Pokrenite besplatni BaaS sken

registracija nije potrebna

Skener Firebase pravila: pronađite otvorena Firestore, Realtime Database i Storage pravila — Docs · FixVibe