FixVibe

// docs / baas security / firebase rules scanner

Skener pravil Firebase: poiščite odprta pravila Firestore, Realtime Database in Storage

Aplikacije Firebase varnostno odpovedo na en sam dosleden način: pravila <code>allow read, write: if true;</code>, ostala iz hitre namestitve test-načina, nikoli zamenjana pred produkcijo. UI-orodja za kodiranje ta pravila generirajo dobesedno iz primerov dokumentacije in razvijalca redko pozovejo, naj jih utrdi. Ta članek prikazuje, kako skener pravil Firebase od zunaj zazna odprta pravila v Firestore, Realtime Database in Cloud Storage — in kako popraviti, kar najde.

Kako skener najde odprta pravila Firebase

Storitve Firebase izpostavljajo dobro znane, predvidljive oblike URL-jev. Skener brez poverilnic lahko vsako sondira in opazuje, ali anonimna branja uspejo. FixVibov pregled baas.firebase-rules teče v treh neodvisnih sondah — eni na storitev 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 sondira https://[project-id]-default-rtdb.firebaseio.com/.json. Če je koren anonimno berljiv, je odziv celotno drevo baze v obliki JSON. Bolj konservativen test poizveduje .json?shallow=true, ki vrne samo ključe na najvišji ravni — najdba v obeh primerih.
  • Cloud Storage. Skener poizveduje https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o. Če odziv brez avtentikacije izpiše imena datotek, je vedro anon-naštevno. Naštevno shrambo je najdba tudi takrat, ko so posamezni prenosi datotek zavrnjeni — napadalci vedro preštejejo, da najdejo ugibljiva imena.

Kako pravzaprav izgleda past test-načina

Hitra namestitev Firebase v dokumentaciji vključuje enega najbolj prilepljenih blokov pravil na internetu:

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

Firebase je nekoč tem pravilom dodajal samodejen 30-dnevni rok veljavnosti. To se je spremenilo: danes pravila trajajo večno, razen če jih razvijalec zamenja. UI-orodja za kodiranje — naučena na letih dokumentacije, ki vključuje blok test-načina — ga pogosto dobesedno izdajo in razvijalcu povedo „to je vaše varnostno pravilo". Ni.

Druge različice, ki se pojavljajo v produkciji, a so enako popustljive:

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;
  • Različica s časovnim žigom v prihodnosti: pravilo, ki vse dovoli do datuma daleč v prihodnosti. Nikoli učinkovito ne poteče (glejte označeni blok zgoraj).
  • allow read: if true; allow write: if request.auth != null; — javna branja, vsak avtenticirani uporabnik lahko piše.
  • allow read, write: if request.auth != null; — vsak prijavljen uporabnik lahko bere ali piše vsak dokument, vključno s podatki drugih uporabnikov.

Kaj storiti, ko skener najde odprto pravilo

Odprta pravila Firebase so izvajalna nuja. Popravek ima isto obliko v vseh treh storitvah: vsako pravilo omejite na request.auth.uid proti izrecnemu polju lastnika. Vsaka storitev ima svojo sintakso pravil:

Firestore

match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Vezava odseka poti {userId} postane edini dokument, ki se ga uporabnik lahko dotakne.

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: datoteke shranjujte pod users/[uid]/[filename] in naj pot uveljavlja lastništvo.

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

Pravila izdajte prek Firebase CLI: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Preverite, da so nova pravila v produkciji, tako da znova zaženete FixVibe-pregled — najdba baas.firebase-rules bi morala izginiti.

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

Kako se to primerja z vgrajenimi orodji Firebase

Konzola Firebase vam pokaže trenutna pravila, vendar jih ne preverja glede izvajalnega vedenja. Simulator pravil Firebase vam omogoča testiranje logike pravil proti sintetičnim zahtevam — uporabno, vendar lokalno. Nobeno od orodij vam ne pove, kaj vaša produkcijska pravila dejansko vrnejo anonimnemu napadalcu na javnem internetu. Zunanji skener, kot je FixVibe (ali Burp Suite z ročno konfiguracijo), je edino, kar sondira iz istega kota kot napadalec. Googlov App Check blaži zlorabe, vendar ne nadomešča pravilno omejenih pravil.

Pogosto zastavljena vprašanja

Ali skener bere ali spreminja moje podatke v Firestore?

Pasivna skeniranja izdajo največ eno anonimno branje na storitev, da potrdijo, ali pravila to dovolijo. Skener zabeleži obliko odziva in prisotnost podatkov — ne stranično, ne našteva dokumentov in ne piše. Pisalne sonde so omejene s preverjenim lastništvom domene in nikoli ne tečejo proti neverificiranim ciljem.

Kaj če moj Firebase-projekt uporablja App Check?

App Check zavrne neavtenticirane zahteve z 403. Skener brez žetona App Check bo pri vsaki sondi videl 403 — kar je pravilen izid. App Check ni nadomestilo za pravilnost pravil (ukraden žeton App Check plus odprto pravilo še vedno odteka podatke), vendar blokira oportunistične zunanje preglede.

Ali lahko skener zazna delne napačne konfiguracije pravil (branje odprto, pisanje zaprto)?

Da — vsako pravilo (allow read, allow write) se sondira ločeno. Sonda samo za branje, ki uspe z 200 OK, sporoči najdbo odprtega branja, tudi če so pisanja zavrnjena. Najdbi sta različni: odtekanje podatkov in manipulacija podatkov sta ločeni tveganji.

Ali to deluje za Firebase-aplikacije, izdane pod lastno domeno?

Da. Skener iz izdanega snopa izvleče ID Firebase-projekta, ne iz domene. Lastne domene, poddomene app.web.app in samostojno gostovane Firebase-aplikacije delujejo enako, dokler je JavaScript-snop dosegljiv.

Naslednji koraki

Zaženite brezplačen FixVibe-pregled proti svojemu produkcijskemu URL-ju — pregled baas.firebase-rules je v vsakem paketu in označi odprta pravila v Firestore, Realtime Database in Cloud Storage. Za poglobljeno razlago vzorca allow read, write: if true glejte Firebase allow read, write: if true razloženo. Za krovni pregled po Supabase, Firebase, Clerk in Auth0 preberite Skener napačnih konfiguracij BaaS.

// preglejte svojo baas-površino

Najdite odprto tabelo, preden jo kdo drug.

Vnesite produkcijski URL. FixVibe ugotovi, s katerimi BaaS-ponudniki vaša aplikacija govori, prepozna njihove javne končne točke in poroča, kaj lahko nepristni odjemalec prebere ali zapiše. Brezplačno, brez namestitve, brez kartice.

  • Brezplačni paket — 3 skeniranja na mesec, brez kartice ob prijavi.
  • Pasivno prstno odtisovanje BaaS — preverjanje lastništva domene ni potrebno.
  • Supabase, Firebase, Clerk, Auth0, Appwrite in več.
  • Pozivi za UI-popravke pri vsakem najdenem problemu — prilepite nazaj v Cursor / Claude Code.
Skener pravil Firebase: poiščite odprta pravila Firestore, Realtime Database in Storage — Docs · FixVibe