FixVibe

// docs / baas security / firebase rules scanner

Firebase rules scanner: hanapin ang mga bukas na Firestore, Realtime Database, at Storage rules

Ang mga Firebase apps ay nagagagamot ng seguridad sa isang pare-parehong paraan: <code>allow read, write: if true;</code> rules na natira mula sa test-mode quickstart, hindi kailanman napalitan bago ang produksyon. Ang AI coding tools ay nagsusulat nito nang verbatim mula sa mga documentation examples at bihirang mag-prompt sa developer na patibayin ang mga ito. Ipinapakita ng artikulong ito kung paano natutuklasan ng Firebase rules scanner ang mga bukas na rules sa Firestore, Realtime Database, at Cloud Storage mula sa labas ng project โ€” at kung paano ayusin ang nahanap nito.

Paano nakakahanap ng mga bukas na Firebase rules ang scanner

Ang mga Firebase services ay nag-e-expose ng kilala at predictable na URL shapes. Maaaring mag-probe sa bawat isa ang isang scanner na walang credentials at obserbahan kung nagtatagumpay ang mga anonymous reads. Ang baas.firebase-rules check ng FixVibe ay tumatakbo sa tatlong independent probes โ€” isa bawat Firebase service:

  • <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. Nagpo-probe ang scanner sa https://[project-id]-default-rtdb.firebaseio.com/.json. Kung ang root ay nababasa nang anonymous, ang response ay ang buong database tree bilang JSON. Ang isang mas konserbatibong test ay nag-query ng .json?shallow=true, na nagbabalik ng top-level keys lamang โ€” isang finding sa alinmang paraan.
  • Cloud Storage. Nag-query ang scanner sa https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o. Kung ang response ay nagla-list ng mga file names nang walang authentication, ang bucket ay anon-listable. Ang listable storage ay isang finding kahit na ang mga indibidwal na file downloads ay ipinagbabawal โ€” ine-enumerate ng mga umaatake ang bucket upang mahanap ang mga mahuhulaan na filenames.

Ano talaga ang itsura ng test-mode footgun

Ang quickstart documentation ng Firebase ay naglalaman ng isa sa pinaka-kinokopyang rule blocks sa internet:

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

Ang Firebase ay dating nagdadagdag ng awtomatikong 30-araw na expiry sa mga rules na ito. Nagbago iyon: ngayon ang mga rules ay nananatiling walang katapusan maliban kung papalitan ng developer. Ang AI coding tools โ€” na nasanay sa mga taon ng documentation na may kasamang test-mode block โ€” ay madalas naglalabas nito nang verbatim at sinasabi sa developer na "ito ang iyong security rule." Hindi ito.

Iba pang variants na lumalabas sa produksyon ngunit pantay na permissive:

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;
  • Isang future-timestamp variant: isang rule na nagpapahintulot ng lahat hanggang sa isang petsa sa malayong hinaharap. Hindi kailanman epektibong nag-e-expire (tingnan ang naka-highlight na block sa itaas).
  • allow read: if true; allow write: if request.auth != null; โ€” public reads, anumang authenticated user ay makakapagsulat.
  • allow read, write: if request.auth != null; โ€” anumang signed-in user ay makakabasa o makakapagsulat ng anumang dokumento, kasama ang data ng ibang users.

Ano ang gagawin kapag may natuklasang bukas na rule ang scanner

Ang mga bukas na Firebase rules ay isang runtime emergency. Pareho ang hugis ng pag-aayos sa lahat ng tatlong services: i-scope ang bawat rule sa request.auth.uid laban sa tahasang owner field. Ang bawat service ay may sarili nitong rule syntax:

Firestore

match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Ang path-segment binding na {userId} ay nagiging ang tanging dokumento na maaaring hawakan ng user.

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; } } }. Convention: mag-imbak ng files sa ilalim ng users/[uid]/[filename] at hayaan ang path na mag-enforce ng ownership.

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

I-deploy ang rules sa pamamagitan ng Firebase CLI: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. I-verify na ang mga bagong rules ay nasa produksyon sa pamamagitan ng muling pagpapatakbo ng FixVibe scan โ€” dapat nang mawala ang baas.firebase-rules finding.

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

Paano ito naihahambing sa built-in tools ng Firebase

Ipinapakita ng Firebase Console ang kasalukuyang rules ngunit hindi sila ina-audit laban sa runtime behaviour. Ang Firebase Rules simulator ay nagpapahintulot sa iyong i-test ang rule logic laban sa synthetic requests โ€” kapaki-pakinabang ngunit lokal. Walang isa sa mga ito ang nagsasabi sa iyo kung ano ang aktwal na ibinabalik ng iyong production rules sa isang anonymous attacker sa pampublikong internet. Ang isang external scanner tulad ng FixVibe (o Burp Suite na may manwal na konpigurasyon) ang tanging bagay na nagpo-probe mula sa parehong anggulo na gagamitin ng umaatake. Ang sariling App Check ng Google ay nakakapag-mitigate ng pang-aabuso ngunit hindi pamalit sa wastong na-scope na rules.

Mga madalas na itinatanong

Babasahin o babaguhin ba ng scanner ang aking Firestore data?

Ang mga passive scans ay naglalabas ng pinakamadami na isang anonymous read bawat service upang kumpirmahin kung pinapayagan ito ng rules. Itinatala ng scanner ang hugis ng response at ang presensya ng data โ€” hindi ito nagpa-paginate, hindi nag-e-enumerate ng mga dokumento, at hindi nagsusulat. Ang mga write probes ay nasa likod ng verified domain ownership at hindi kailanman tumatakbo laban sa mga unverified targets.

Paano kung ang aking Firebase project ay gumagamit ng App Check?

Ang App Check ay nagtatanggi sa mga unauthenticated requests na may 403. Ang isang scanner na walang App Check token ay makakakita ng 403 sa bawat probe โ€” na siyang tamang resulta. Ang App Check ay hindi pamalit sa katumpakan ng rule (ang isang nakaw na App Check token kasama ang isang bukas na rule ay nag-le-leak pa rin ng data), ngunit hinaharangan nito ang mga opportunistic external scans.

Maaaring matukoy ba ng scanner ang mga partial rule misconfigurations (bukas na read, sarado na write)?

Oo โ€” ang bawat rule (allow read, allow write) ay sinasapong nang hiwalay. Ang isang read-only probe na nagtagumpay na may 200 OK ay nag-uulat ng open-read finding kahit na ipinagbabawal ang mga writes. Ang dalawang findings ay magkahiwalay: ang data exfiltration at data manipulation ay magkahiwalay na mga panganib.

Gumagana ba ito para sa mga Firebase app na naka-deploy sa custom domain?

Oo. Kinukuha ng scanner ang Firebase project ID mula sa bundle ng naka-deploy, hindi mula sa domain. Ang mga custom domains, app.web.app subdomains, at self-hosted Firebase apps ay lahat gumagana sa parehong paraan hangga't naaabot ang JavaScript bundle.

Mga susunod na hakbang

Magpatakbo ng libreng FixVibe scan laban sa iyong production URL โ€” ang baas.firebase-rules check ay nag-de-deploy sa bawat plan at nagba-flag ng mga bukas na rules sa Firestore, Realtime Database, at Cloud Storage. Para sa mas malalim na pagpapaliwanag ng allow read, write: if true pattern partikular, tingnan ang Firebase allow read, write: if true ipinaliwanag. Para sa pangkalahatang tanaw sa Supabase, Firebase, Clerk, at Auth0, basahin ang BaaS misconfiguration scanner.

// i-scan ang iyong baas surface

Hanapin ang bukas na talahanayan bago ito mahanap ng iba.

Ilagay ang isang production URL. Ine-enumerate ng FixVibe ang mga BaaS providers na kausap ng iyong app, kine-fingerprint ang kanilang mga pampublikong endpoints, at iniuulat kung ano ang mababasa o maisusulat ng isang unauthenticated client. Libre, walang install, walang card.

  • Libreng tier โ€” 3 scan / buwan, walang signup card.
  • Passive BaaS fingerprinting โ€” walang kailangang domain verification.
  • Supabase, Firebase, Clerk, Auth0, Appwrite, at iba pa.
  • Mga AI fix prompts sa bawat finding โ€” i-paste pabalik sa Cursor / Claude Code.
Firebase rules scanner: hanapin ang mga bukas na Firestore, Realtime Database, at Storage rules โ€” Docs ยท FixVibe