FixVibe

// docs / baas security / firebase rules scanner

Firebase rules-scanner: hitta öppna regler i Firestore, Realtime Database och Storage

Firebase-appar fallerar säkerhetsmässigt på ett konsekvent sätt: <code>allow read, write: if true;</code>-regler som blivit kvar från test-mode-snabbstarten, aldrig ersatta innan produktion. AI-kodningsverktyg genererar dessa regler ordagrant från dokumentationsexempel och uppmanar sällan utvecklaren att härda dem. Den här artikeln visar hur en Firebase rules-scanner upptäcker öppna regler över Firestore, Realtime Database och Cloud Storage utanför projektet — och hur du åtgärdar det den hittar.

Hur scannern hittar öppna Firebase-regler

Firebase-tjänster exponerar välkända, förutsägbara URL-former. En scanner utan inloggningsuppgifter kan sondera var och en och observera om anonyma läsningar lyckas. FixVibes baas.firebase-rules-check körs i tre oberoende sonderingar — en per Firebase-tjänst:

  • <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. Scannern sonderar https://[project-id]-default-rtdb.firebaseio.com/.json. Om roten är anonymt läsbar är svaret hela databasträdet som JSON. Ett mer konservativt test frågar .json?shallow=true, som bara returnerar top-level-nycklar — i båda fallen ett fynd.
  • Cloud Storage. Scannern frågar https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o. Om svaret listar filnamn utan autentisering är bucketen anonymt listbar. Listbart storage är ett fynd även när enskilda filnedladdningar nekas — angripare räknar upp bucketen för att hitta gissningsbara filnamn.

Hur test-mode-fotskottet faktiskt ser ut

Firebases snabbstartsdokumentation innehåller ett av de mest kopierade regelblocken på internet:

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

Firebase brukade lägga till en automatisk 30-dagars förfallotid på dessa regler. Det har ändrats: idag persisterar reglerna för alltid om inte utvecklaren ersätter dem. AI-kodningsverktyg — tränade på flera år av dokumentation som inkluderar test-mode-blocket — släpper det ofta ordagrant och säger till utvecklaren "det här är din säkerhetsregel". Det är det inte.

Andra varianter som dyker upp i produktion men är lika tillåtande:

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 variant med framtida tidsstämpel: en regel som tillåter allt fram till ett datum långt i framtiden. Förfaller aldrig effektivt (se det markerade blocket ovan).
  • allow read: if true; allow write: if request.auth != null; — publika läsningar, vilken autentiserad användare som helst kan skriva.
  • allow read, write: if request.auth != null; — vilken inloggad användare som helst kan läsa eller skriva vilket dokument som helst, inklusive andra användares data.

Vad du gör när scannern hittar en öppen regel

Öppna Firebase-regler är en runtime-nödsituation. Fixen har samma form över alla tre tjänsterna: begränsa varje regel till request.auth.uid mot ett explicit ägarfält. Varje tjänst har sin egen regelsyntax:

Firestore

match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Sökvägs-segment-bindningen {userId} blir det enda dokumentet användaren kan röra.

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: lagra filer under users/[uid]/[filename] och låt sökvägen tvinga fram ägarskap.

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

Deploya regler via Firebase CLI: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Verifiera att de nya reglerna är i produktion genom att köra FixVibe-skanningen igen — baas.firebase-rules-fyndet ska försvinna.

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

Hur detta jämförs med Firebases inbyggda verktyg

Firebase-konsolen visar dig de aktuella reglerna men granskar dem inte mot runtime-beteende. Firebase Rules-simulatorn låter dig testa regel-logik mot syntetiska förfrågningar — användbart men lokalt. Inget av verktygen säger dig vad dina produktionsregler faktiskt returnerar till en anonym angripare på det publika internetet. En extern scanner som FixVibe (eller Burp Suite med manuell konfiguration) är det enda som sonderar från samma vinkel som en angripare skulle. Googles egen App Check mildrar missbruk men ersätter inte korrekt avgränsade regler.

Vanliga frågor

Läser eller modifierar scannern mina Firestore-data?

Passiva skanningar utfärdar som mest en anonym läsning per tjänst för att bekräfta om regler tillåter den. Scannern noterar response-form och förekomst av data — den paginerar inte, räknar inte upp dokument och skriver inte. Skriv-sonderingar är begränsade bakom verifierat domänägarskap och körs aldrig mot overifierade mål.

Vad händer om mitt Firebase-projekt använder App Check?

App Check avvisar oautentiserade förfrågningar med 403. En scanner utan App Check-token ser 403 på varje sondering — vilket är det korrekta utfallet. App Check är ingen ersättning för regel-korrekthet (en stulen App Check-token plus en öppen regel läcker fortfarande data), men det blockerar opportunistiska externa skanningar.

Kan scannern upptäcka partiella regel-felkonfigurationer (läs öppen, skriv stängd)?

Ja — varje regel (allow read, allow write) sonderas separat. En läs-bara-sondering som lyckas med 200 OK rapporterar ett öppet-läs-fynd även om skrivningar nekas. De två fynden är distinkta: dataexfiltration och datamanipulation är separata risker.

Fungerar detta för Firebase-appar deployade under en egen domän?

Ja. Scannern extraherar Firebase-projekt-ID:t från den deployade bundlen, inte från domänen. Egna domäner, app.web.app-subdomäner och självhostade Firebase-appar fungerar alla på samma sätt så länge JavaScript-bundlen är nåbar.

Nästa steg

Kör en gratis FixVibe-scanning mot din produktions-URL — baas.firebase-rules-checken ingår i varje plan och flaggar öppna regler över Firestore, Realtime Database och Cloud Storage. För en djupare förklaring specifikt av allow read, write: if true-mönstret, se Firebase allow read, write: if true förklarat. För helhetsbilden över Supabase, Firebase, Clerk och Auth0, läs BaaS-felkonfigurationsscanner.

// skanna din baas-yta

Hitta den öppna tabellen innan någon annan gör det.

Klistra in en produktions-URL. FixVibe identifierar BaaS-leverantörerna din app pratar med, fingeravtryckar deras publika endpoints och rapporterar vad en oautentiserad klient kan läsa eller skriva. Gratis, ingen installation, inget kort.

  • Gratisnivå — 3 skanningar/månad, inget kort vid registrering.
  • Passiv BaaS-fingeravtryckning — ingen domänverifiering krävs.
  • Supabase, Firebase, Clerk, Auth0, Appwrite och fler.
  • AI-fixprompter på varje fynd — klistra tillbaka in i Cursor / Claude Code.
Kör en gratis BaaS-skanning

ingen registrering krävs

Firebase rules-scanner: hitta öppna regler i Firestore, Realtime Database och Storage — Docs · FixVibe