FixVibe

// docs / baas security / firebase rules scanner

Firebase-regelsscanner: vind open Firestore-, Realtime Database- en Storage-regels

Firebase-apps falen op een consistente manier in beveiliging: <code>allow read, write: if true;</code>-regels die zijn overgebleven van de testmodus-quickstart, nooit vervangen vΓ³Γ³r productie. AI-codeertools regenereren deze regels woordelijk uit documentatievoorbeelden en vragen de ontwikkelaar zelden om ze te verharden. Dit artikel laat zien hoe een Firebase-regelsscanner open regels in Firestore, Realtime Database en Cloud Storage detecteert vanaf buiten het project β€” en hoe je oplost wat het vindt.

Hoe de scanner open Firebase-regels vindt

Firebase-diensten stellen bekende, voorspelbare URL-vormen bloot. Een scanner zonder credentials kan elk onderzoeken en observeren of anonieme reads slagen. De baas.firebase-rules-check van FixVibe draait in drie onafhankelijke sondes β€” één per Firebase-dienst:

  • <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. De scanner sondeert https://[project-id]-default-rtdb.firebaseio.com/.json. Als de root anoniem leesbaar is, is het antwoord de hele databaseboom als JSON. Een conservatievere test bevraagt .json?shallow=true, die alleen sleutels op het hoogste niveau retourneert β€” een bevinding hoe dan ook.
  • Cloud Storage. De scanner bevraagt https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o. Als het antwoord bestandsnamen oplijst zonder authenticatie, is de bucket anoniem oplijstbaar. Oplijstbare opslag is een bevinding zelfs wanneer individuele bestandsdownloads worden geweigerd β€” aanvallers somen de bucket op om raadbare bestandsnamen te vinden.

Hoe de testmodus-voetangel er echt uitziet

De quickstart-documentatie van Firebase bevat een van de meest-gekopieerde regelblokken op het internet:

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

Firebase voegde vroeger een automatische 30-dagen-vervaltijd toe aan deze regels. Dat is veranderd: vandaag persisteren de regels voor altijd, tenzij de ontwikkelaar ze vervangt. AI-codeertools β€” getraind op jaren documentatie die het testmodus-blok bevat β€” produceren het vaak woordelijk en vertellen de ontwikkelaar "dit is je beveiligingsregel". Dat is het niet.

Andere varianten die in productie verschijnen maar even tolerant zijn:

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;
  • Een toekomstige-tijdstempel-variant: een regel die alles toestaat tot een datum ver in de toekomst. Verloopt nooit effectief (zie het gemarkeerde blok hierboven).
  • allow read: if true; allow write: if request.auth != null; β€” openbare reads, elke geauthenticeerde gebruiker kan schrijven.
  • allow read, write: if request.auth != null; β€” elke ingelogde gebruiker kan elk document lezen of schrijven, inclusief de gegevens van andere gebruikers.

Wat te doen wanneer de scanner een open regel vindt

Open Firebase-regels zijn een runtime-noodsituatie. De fix heeft dezelfde vorm over alle drie de diensten: scoop elke regel naar request.auth.uid tegen een expliciet eigenaarsveld. Elke dienst heeft zijn eigen regelsyntaxis:

Firestore

match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. De padsegmentbinding {userId} wordt het enige document dat de gebruiker kan aanraken.

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; } } }. Conventie: sla bestanden op onder users/[uid]/[filename] en laat het pad eigenaarschap afdwingen.

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

Deploy regels via de Firebase CLI: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Verifieer dat de nieuwe regels in productie zijn door de FixVibe-scan opnieuw uit te voeren β€” de baas.firebase-rules-bevinding zou moeten verdwijnen.

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

Hoe dit zich verhoudt tot de ingebouwde tools van Firebase

De Firebase Console laat je de huidige regels zien maar audit ze niet tegen runtime-gedrag. De Firebase Rules-simulator laat je regellogica testen tegen synthetische aanvragen β€” nuttig maar lokaal. Geen van beide tools vertelt je wat je productieregels daadwerkelijk retourneren aan een anonieme aanvaller op het openbare internet. Een externe scanner zoals FixVibe (of Burp Suite met handmatige configuratie) is het enige dat sondeert vanuit dezelfde hoek als een aanvaller. Google's eigen App Check mitigeert misbruik maar vervangt niet correct gescoopte regels.

Veelgestelde vragen

Leest of wijzigt de scanner mijn Firestore-data?

Passieve scans geven hooguit één anonieme read per dienst uit om te bevestigen of regels het toestaan. De scanner registreert antwoordvorm en de aanwezigheid van data β€” het pagineert niet, somt geen documenten op, en schrijft niet. Schrijfsondes zijn afgeschermd achter geverifieerd domeineigenaarschap en lopen nooit tegen ongeverifieerde doelen.

Wat als mijn Firebase-project App Check gebruikt?

App Check weigert niet-geauthenticeerde aanvragen met een 403. Een scanner zonder App Check-token zal 403 zien op elke sonde β€” wat de juiste uitkomst is. App Check is geen vervanging voor regelcorrectheid (een gestolen App Check-token plus een open regel lekt nog steeds data), maar het blokkeert wel opportunistische externe scans.

Kan de scanner gedeeltelijke regelmisconfiguraties detecteren (lezen open, schrijven gesloten)?

Ja β€” elke regel (allow read, allow write) wordt afzonderlijk gesondeerd. Een alleen-lezen-sonde die slaagt met een 200 OK rapporteert een open-lezen-bevinding, zelfs als writes worden geweigerd. De twee bevindingen zijn onderscheiden: data-exfiltratie en data-manipulatie zijn aparte risico's.

Werkt dit voor Firebase-apps die zijn gedeployd onder een aangepast domein?

Ja. De scanner extraheert de Firebase-project-ID uit de gedeployde bundle, niet uit het domein. Aangepaste domeinen, app.web.app-subdomeinen en zelf-gehoste Firebase-apps werken allemaal op dezelfde manier zolang de JavaScript-bundle bereikbaar is.

Volgende stappen

Voer een gratis FixVibe-scan uit tegen je productie-URL β€” de baas.firebase-rules-check wordt geleverd op elk plan en markeert open regels in Firestore, Realtime Database en Cloud Storage. Voor een diepere uitleg specifiek over het allow read, write: if true-patroon, zie Firebase allow read, write: if true uitgelegd. Voor het paraplu-overzicht over Supabase, Firebase, Clerk en Auth0, lees BaaS-misconfiguratiescanner.

// scan je baas-oppervlak

Vind de open tabel voordat iemand anders dat doet.

Voer een productie-URL in. FixVibe somt de BaaS-providers op waarmee je app communiceert, fingerprint hun openbare endpoints en rapporteert wat een niet-geauthenticeerde client kan lezen of schrijven. Gratis, geen installatie, geen kaart.

  • Gratis tier β€” 3 scans / maand, geen kaart bij aanmelden.
  • Passieve BaaS-fingerprinting β€” geen domeinverificatie nodig.
  • Supabase, Firebase, Clerk, Auth0, Appwrite en meer.
  • AI-fixprompts bij elke bevinding β€” plak terug in Cursor / Claude Code.
Firebase-regelsscanner: vind open Firestore-, Realtime Database- en Storage-regels β€” Docs Β· FixVibe