FixVibe

// docs / baas security / firebase rules scanner

Firebase-regelscanner: find åbne Firestore-, Realtime Database- og Storage-regler

Firebase-apps fejler sikkerheden på én konsistent måde: <code>allow read, write: if true;</code>-regler efterladt fra test-mode-quickstarten, aldrig erstattet før produktion. AI-kodeværktøjer genererer disse regler ordret fra dokumentationseksempler og prompter sjældent udvikleren til at hærde dem. Denne artikel viser, hvordan en Firebase-regelscanner opdager åbne regler på tværs af Firestore, Realtime Database og Cloud Storage udefra projektet — og hvordan man retter det, den finder.

Sådan finder scanneren åbne Firebase-regler

Firebase-tjenester eksponerer velkendte, forudsigelige URL-former. En scanner uden legitimationsoplysninger kan sondere hver enkelt og observere, om anonyme læsninger lykkes. FixVibes baas.firebase-rules-check kører i tre uafhængige sonderinger — én per Firebase-tjeneste:

  • <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. Scanneren sonderer https://[project-id]-default-rtdb.firebaseio.com/.json. Hvis roden er læsbar anonymt, er svaret hele databasetræet som JSON. En mere konservativ test forespørger .json?shallow=true, som returnerer kun topniveau-nøgler — et fund under alle omstændigheder.
  • Cloud Storage. Scanneren forespørger https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o. Hvis svaret lister filnavne uden autentificering, er bucketen anon-listbar. Listbar storage er et fund, selv når individuelle fildownloads er nægtet — angribere opregner bucketen for at finde gættelige filnavne.

Hvordan test-mode-faldgruben faktisk ser ud

Firebase's quickstart-dokumentation inkluderer en af de mest kopierede regelblokke på internettet:

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

Firebase plejede at tilføje et automatisk 30-dages udløb på disse regler. Det ændrede sig: i dag består reglerne for evigt, medmindre udvikleren erstatter dem. AI-kodeværktøjer — der har trænet på år af dokumentation, der inkluderer test-mode-blokken — udsender den ofte ordret og fortæller udvikleren "dette er din sikkerhedsregel." Det er den ikke.

Andre varianter, der dukker op i produktion, men er lige så tilladende:

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;
  • En fremtidigt-tidsstempel-variant: en regel, der tillader alt indtil en dato langt ude i fremtiden. Udløber aldrig effektivt (se den fremhævede blok ovenfor).
  • allow read: if true; allow write: if request.auth != null; — offentlige læsninger, enhver autentificeret bruger kan skrive.
  • allow read, write: if request.auth != null; — enhver indlogget bruger kan læse eller skrive ethvert dokument, inklusive andre brugeres data.

Hvad man gør, når scanneren finder en åben regel

Åbne Firebase-regler er en runtime-nødsituation. Løsningen har samme form på tværs af alle tre tjenester: begræns hver regel til request.auth.uid mod et eksplicit ejer-felt. Hver tjeneste har sin egen regelsyntaks:

Firestore

match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Sti-segment-bindingen {userId} bliver det eneste dokument, brugeren kan røre.

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; } } }. Konvention: gem filer under users/[uid]/[filename], og lad stien håndhæve ejerskab.

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

Deploy regler via Firebase CLI: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Verificer, at de nye regler er i produktion, ved at køre FixVibe-scanningen igen — baas.firebase-rules-fundet bør forsvinde.

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

Hvordan dette sammenlignes med Firebase's indbyggede værktøjer

Firebase Console viser dig de aktuelle regler, men reviderer dem ikke mod runtime-adfærd. Firebase Rules-simulatoren lader dig teste regellogik mod syntetiske anmodninger — nyttig, men lokal. Ingen af værktøjerne fortæller dig, hvad dine produktionsregler faktisk returnerer til en anonym angriber på det offentlige internet. En ekstern scanner som FixVibe (eller Burp Suite med manuel konfiguration) er det eneste, der sonderer fra den samme vinkel, som en angriber ville. Googles egen App Check mindsker misbrug, men erstatter ikke korrekt afgrænsede regler.

Ofte stillede spørgsmål

Læser eller modificerer scanneren mine Firestore-data?

Passive scanninger udsteder højst én anonym læsning per tjeneste for at bekræfte, om regler tillader det. Scanneren registrerer response-form og tilstedeværelsen af data — den paginerer ikke, opregner ikke dokumenter og skriver ikke. Skrivesonderinger er begrænset bag verificeret domæneejerskab og kører aldrig mod uverificerede mål.

Hvad nu hvis mit Firebase-projekt bruger App Check?

App Check afviser uautentificerede anmodninger med en 403. En scanner uden et App Check-token vil se 403 på hver sondering — hvilket er det korrekte resultat. App Check er ikke en erstatning for regelkorrekthed (et stjålet App Check-token plus en åben regel lækker stadig data), men det blokerer opportunistiske eksterne scanninger.

Kan scanneren opdage delvise regelfejlkonfigurationer (læse åben, skrive lukket)?

Ja — hver regel (allow read, allow write) sonderes separat. En læse-kun-sondering, der lykkes med et 200 OK, rapporterer et åben-læse-fund, selv hvis skrivninger er nægtet. De to fund er distinkte: dataeksfiltration og datamanipulation er separate risici.

Fungerer dette for Firebase-apps deployet under et brugerdefineret domæne?

Ja. Scanneren udtrækker Firebase-projekt-ID'et fra det deployede bundt, ikke fra domænet. Brugerdefinerede domæner, app.web.app-subdomæner og selv-hostede Firebase-apps fungerer alle på samme måde, så længe JavaScript-bundtet er tilgængeligt.

Næste skridt

Kør en gratis FixVibe-scanning mod din produktions-URL — baas.firebase-rules-checken leveres på hver plan og markerer åbne regler på tværs af Firestore, Realtime Database og Cloud Storage. For en dybere forklaring af allow read, write: if true-mønsteret specifikt, se Firebase allow read, write: if true forklaret. For paraplyvisningen på tværs af Supabase, Firebase, Clerk og Auth0, læs BaaS-fejlkonfigurationsscanner.

// scan din baas-overflade

Find den åbne tabel, før nogen anden gør det.

Indsæt en produktions-URL. FixVibe opregner de BaaS-udbydere, din app taler med, fingeraftrykker deres offentlige endpoints og rapporterer, hvad en uautentificeret klient kan læse eller skrive. Gratis, ingen installation, intet kort.

  • Gratis niveau — 3 scanninger/måned, intet kort ved tilmelding.
  • Passiv BaaS-fingeraftrykning — ingen domæneverifikation påkrævet.
  • Supabase, Firebase, Clerk, Auth0, Appwrite og flere.
  • AI-fix-prompts på hvert fund — indsæt tilbage i Cursor / Claude Code.
Kør en gratis BaaS-scanning

ingen tilmelding krævet

Firebase-regelscanner: find åbne Firestore-, Realtime Database- og Storage-regler — Docs · FixVibe