FixVibe

// docs / baas security / firebase rules scanner

Firebase reeglite skanner: leia avatud Firestore, Realtime Database ja Storage reeglid

Firebase'i rakendused ebaõnnestuvad turvalisuses ühel järjekindlal viisil: <code>allow read, write: if true;</code>-reeglid, mis jäid test-mode'i pikkstart'ist alles, mida tootmise eel ei asendatud. AI-koodimistööriistad genereerivad need reeglid sõnasõnalt dokumentatsiooninäidetest ja harva julgustavad arendajat neid kõvastama. See artikkel näitab, kuidas Firebase reeglite skanner tuvastab avatud reegleid Firestore, Realtime Database ja Cloud Storage'i jaoks projekti väljast — ja kuidas leitut parandada.

Kuidas skanner avatud Firebase reegleid leiab

Firebase teenused avaldavad teadaolevaid, ennustatavaid URL-kujusid. Ilma mandaatideta skanner saab igaühte sondeerida ja jälgida, kas anonüümsed lugemised õnnestuvad. FixVibe kontroll baas.firebase-rules käivitatakse kolme sõltumatu sondina — üks Firebase teenuse kohta:

  • <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. Skanner sondeerib https://[project-id]-default-rtdb.firebaseio.com/.json. Kui juur on anonüümselt loetav, on vastus kogu andmebaasipuu JSON-ina. Konservatiivsem test pärib .json?shallow=true, mis tagastab ainult ülataseme võtmed — kummalgi juhul on tegemist leiuga.
  • Cloud Storage. Skanner pärib https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o. Kui vastus loetleb failinimesid ilma autentimiseta, on konteiner anonüümselt loendatav. Loendatav salvestus on leid isegi siis, kui üksikute failide allalaadimised keelatakse — ründajad loendavad konteineri, et leida äraarvatavaid failinimesid.

Kuidas test-mode'i jalga-tulistamine tegelikult välja näeb

Firebase'i pikkstartdokumentatsioon sisaldab ühte interneti enim kopeeritud reeglite plokki:

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

Firebase lisas varem nendele reeglitele automaatse 30-päevase aegumise. See muutus: täna püsivad reeglid igavesti, kui arendaja neid ei asenda. AI-koodimistööriistad — koolitatud aastate dokumentatsioonil, mis sisaldab test-mode'i plokki — väljastavad selle sageli sõnasõnalt ja ütlevad arendajale "see on sinu turvareegel". See pole.

Muud variandid, mis tootmises esinevad, kuid on sama lubavad:

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;
  • Tulevikuajatempli variant: reegel, mis lubab kõike kaugesse tulevikku ulatuvale kuupäevale. Ei aegu kunagi tõhusalt (vt esiletõstetud plokki ülal).
  • allow read: if true; allow write: if request.auth != null; — avalikud lugemised, iga autenditud kasutaja saab kirjutada.
  • allow read, write: if request.auth != null; — iga sissekirjutanud kasutaja saab lugeda või kirjutada mis tahes dokumenti, sealhulgas teiste kasutajate andmeid.

Mida teha, kui skanner avatud reegli leiab

Avatud Firebase reeglid on käitusaegne hädaolukord. Parandus on samakujuline kõikides kolmes teenuses: piira iga reegel request.auth.uid-iga selgesõnalise omaniku välja vastu. Igal teenusel on oma reeglisüntaks:

Firestore

match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Rajasegmendi sidumine {userId} saab ainsaks dokumendiks, mida kasutaja saab puudutada.

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; } } }. Konventsioon: salvesta failid raja users/[uid]/[filename] alla ja lase rajal omandit jõustada.

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

Juuruta reegleid Firebase CLI kaudu: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Kinnita, et uued reeglid on tootmises, käivitades FixVibe-skannimise uuesti — leid baas.firebase-rules peaks kaduma.

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

Kuidas see võrdleb Firebase'i sisseehitatud tööriistadega

Firebase Console näitab sulle praegusi reegleid, kuid ei auditeeri neid käitusaegse käitumise suhtes. Firebase Rules simulaator laseb sul testida reeglite loogikat sünteetilise päringute vastu — kasulik, kuid kohalik. Kumbki tööriist ei ütle sulle, mida sinu tootmisreeglid tegelikult tagastavad anonüümsele ründajale avalikus internetis. Väline skanner nagu FixVibe (või Burp Suite käsitsi seadistamisega) on ainus, mis sondeerib samast nurgast, kust ründaja seda teeks. Google'i enda App Check leevendab väärkasutust, kuid ei asenda õigesti piiratud reegleid.

Korduma kippuvad küsimused

Kas skanner loeb või muudab minu Firestore andmeid?

Passiivsed skannimised saadavad teenuse kohta maksimaalselt ühe anonüümse lugemise, et kinnitada, kas reeglid seda lubavad. Skanner salvestab vastuse kuju ja andmete olemasolu — see ei lehekülganda, ei loenda dokumente ega kirjuta. Kirjutamissondid on piiratud kinnitatud domeeniomandi taha ja neid ei käivitata kunagi kinnitamata sihtmärkide vastu.

Mis siis, kui minu Firebase projekt kasutab App Check'i?

App Check lükkab autentimata päringud tagasi 403-ga. Skanner ilma App Check'i tokenita näeb igal sondil 403-i — mis on õige tulemus. App Check ei asenda reeglite õigsust (varastatud App Check'i token koos avatud reegliga lekib ikkagi andmeid), kuid see blokeerib oportunistlikud välised skannimised.

Kas skanner suudab tuvastada osalisi reegli väärseadistusi (lugemine avatud, kirjutamine suletud)?

Jah — iga reegel (allow read, allow write) sondeeritakse eraldi. Lugemissond, mis õnnestub 200 OK-iga, teatab avatud-lugemise leiust isegi siis, kui kirjutamised on keelatud. Kaks leidu on eraldi: andmete eksfiltreerimine ja andmete manipuleerimine on eraldi riskid.

Kas see töötab Firebase'i rakenduste puhul, mis on juurutatud kohandatud domeenil?

Jah. Skanner eraldab Firebase'i projekti ID juurutatud pakist, mitte domeenist. Kohandatud domeenid, app.web.app-alamdomeenid ja iseseismaktitud Firebase'i rakendused töötavad kõik samamoodi, kuni JavaScripti pakk on kättesaadav.

Järgmised sammud

Käivita tasuta FixVibe-skannimine oma tootmise URL-i vastu — kontroll baas.firebase-rules tarnitakse igas plaanis ja märgib avatud reegleid Firestores, Realtime Database'is ja Cloud Storage'is. Sügavama selgituse jaoks mustri allow read, write: if true kohta vaata Firebase allow read, write: if true selgitatud. Üldpildi saamiseks Supabase, Firebase, Clerk ja Auth0 üle, loe BaaS väärseadistuse skanner.

// skanni oma baas-pinda

Leia avatud tabel enne, kui keegi teine seda teeb.

Anna ette tootmise URL. FixVibe loendab BaaS-pakkujad, kellega sinu rakendus suhtleb, võtab nende avalikest otspunktidest sõrmejäljed ja teatab, mida autentimata klient lugeda või kirjutada saab. Tasuta, paigaldust ei vaja, kaarti ei vaja.

  • Tasuta tase — 3 skannimist kuus, registreerimiseks kaarti ei vaja.
  • Passiivne BaaS-sõrmejäljevõtmine — domeeni kinnitamist ei vaja.
  • Supabase, Firebase, Clerk, Auth0, Appwrite ja palju muud.
  • AI-paranduskäskluse leid igale leiule — kleebi tagasi Cursor / Claude Code'i.
Käivita tasuta BaaS-skannimine

registreerimist ei nõuta

Firebase reeglite skanner: leia avatud Firestore, Realtime Database ja Storage reeglid — Docs · FixVibe