// docs / baas security / firebase rules scanner
Sganiwr rheolau Firebase: dod o hyd i reolau Firestore, Realtime Database, a Storage agored
Mae apiau Firebase yn methu diogelwch mewn un ffordd gyson: rheolau <code>allow read, write: if true;</code> a adawyd dros ben o gychwyn cyflym modd-prawf, byth wedi'u disodli cyn cynhyrchu. Mae offer codio AI yn cynhyrchu'r rheolau hyn air am air o enghreifftiau dogfennaeth ac anaml yn annog y datblygwr i'w caledu. Mae'r erthygl hon yn dangos sut mae sganiwr rheolau Firebase yn canfod rheolau agored ar draws Firestore, Realtime Database, a Cloud Storage o'r tu allan i'r prosiect — a sut i drwsio'r hyn y mae'n ei ganfod.
Sut mae'r sganiwr yn canfod rheolau Firebase agored
Mae gwasanaethau Firebase yn datgelu siapiau URL adnabyddus, rhagweladwy. Gall sganiwr heb gymwysterau archwilio pob un ac arsylwi a yw darlleniadau anhysbys yn llwyddo. Mae'r gwiriad FixVibe baas.firebase-rules yn rhedeg mewn tri archwiliad annibynnol — un fesul gwasanaeth Firebase:
- <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. Mae'r sganiwr yn archwilio
https://[project-id]-default-rtdb.firebaseio.com/.json. Os yw'r gwraidd yn ddarllenadwy'n anhysbys, mae'r ymateb yn goeden cronfa ddata gyfan fel JSON. Mae prawf mwy ceidwadol yn ymholi.json?shallow=true, sy'n dychwelyd allweddi lefel uchaf yn unig — canfyddiad bob ffordd. - Cloud Storage. Mae'r sganiwr yn ymholi
https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o. Os yw'r ymateb yn rhestru enwau ffeiliau heb ddilysu, mae'r bwced yn rhestradwy gan anon. Mae storio rhestradwy'n ganfyddiad hyd yn oed pan fydd lawrlwythiadau ffeiliau unigol yn cael eu gwadu — mae ymosodwyr yn rhifo'r bwced i ddod o hyd i enwau ffeiliau dyfaladwy.
Sut mae gwn-traed modd-prawf wir yn edrych
Mae dogfennaeth cychwyn cyflym Firebase yn cynnwys un o'r blociau rheolau a gopïwyd fwyaf ar y rhyngrwyd:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}Roedd Firebase yn arfer ychwanegu dyddiad dod i ben awtomatig o 30 diwrnod ar y rheolau hyn. Mae hynny wedi newid: heddiw mae'r rheolau'n parhau am byth oni bai bod y datblygwr yn eu disodli. Mae offer codio AI — wedi eu hyfforddi ar flynyddoedd o ddogfennaeth sy'n cynnwys y bloc modd-prawf — yn aml yn ei allbynnu'n union ac yn dweud wrth y datblygwr "hon yw dy reol ddiogelwch." Nid yw.
Amrywiadau eraill sy'n ymddangos mewn cynhyrchu ond sy'n yr un mor ganiataol:
// 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;
- Amrywiad amserwr dyfodol: rheol sy'n caniatáu popeth tan ddyddiad ymhell yn y dyfodol. Byth yn dod i ben yn effeithiol (gweler y bloc wedi'i amlygu uchod).
allow read: if true; allow write: if request.auth != null;— darlleniadau cyhoeddus, gall unrhyw ddefnyddiwr wedi'i ddilysu ysgrifennu.allow read, write: if request.auth != null;— gall unrhyw ddefnyddiwr sydd wedi mewngofnodi ddarllen neu ysgrifennu unrhyw ddogfen, gan gynnwys data defnyddwyr eraill.
Beth i'w wneud pan fydd y sganiwr yn canfod rheol agored
Mae rheolau Firebase agored yn argyfwng amser rhedeg. Mae'r trwsiad yr un siâp ar draws yr holl dri gwasanaeth: cwmpas pob rheol i request.auth.uid yn erbyn maes perchennog penodol. Mae gan bob gwasanaeth ei gystrawen rheolau ei hun:
Firestore
match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Mae rhwymo segment llwybr {userId} yn dod yn unig ddogfen y gall y defnyddiwr ei chyffwrdd.
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.
{
"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; } } }. Confensiwn: storio ffeiliau o dan users/[uid]/[filename] a gadael i'r llwybr orfodi perchnogaeth.
service firebase.storage {
match /b/{bucket}/o {
match /users/{userId}/{allPaths=**} {
allow read, write: if request.auth.uid == userId;
}
}
}Lleola reolau trwy CLI Firebase: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Dilysa fod y rheolau newydd mewn cynhyrchu trwy ail-redeg sgan FixVibe — dylai'r canfyddiad baas.firebase-rules glirio.
firebase deploy --only firestore:rules
firebase deploy --only database
firebase deploy --only storageSut mae hyn yn cymharu ag offer adeiledig Firebase
Mae Console Firebase yn dangos y rheolau cyfredol i ti ond nid yw'n archwilio yn eu herbyn ymddygiad amser rhedeg. Mae efelychydd Rheolau Firebase yn gadael i ti brofi rhesymeg rheolau yn erbyn ceisiadau synthetig — defnyddiol ond lleol. Nid yw'r naill offeryn yn dweud wrthyt yr hyn y mae dy reolau cynhyrchu yn ei ddychwelyd mewn gwirionedd i ymosodwr anhysbys ar y rhyngrwyd cyhoeddus. Sganiwr allanol fel FixVibe (neu Burp Suite gyda chyfluniad â llaw) yw'r unig beth sy'n archwilio o'r un ongl y byddai ymosodwr yn ei ddefnyddio. Mae App Check Google ei hun yn lliniaru cam-drin ond nid yw'n disodli rheolau wedi'u cwmpasu'n gywir.
Cwestiynau cyffredin
A yw'r sganiwr yn darllen neu'n addasu fy nata Firestore?
Mae sganiau goddefol yn cyhoeddi ar y mwyaf un darlleniad anhysbys fesul gwasanaeth i gadarnhau a yw rheolau'n ei ganiatáu. Mae'r sganiwr yn cofnodi siâp yr ymateb a phresenoldeb data — nid yw'n tudalennu, nid yw'n rhifo dogfennau, ac nid yw'n ysgrifennu. Mae archwiliadau ysgrifennu'n cael eu gosod y tu ôl i ddilysu perchnogaeth parth ac nid ydynt byth yn rhedeg yn erbyn targedau heb eu dilysu.
Beth os yw fy mhrosiect Firebase yn defnyddio App Check?
Mae App Check yn gwrthod ceisiadau heb eu dilysu gyda 403. Bydd sganiwr heb docyn App Check yn gweld 403 ar bob archwiliad — sef y canlyniad cywir. Nid yw App Check yn lle ar gyfer cywirdeb rheolau (mae tocyn App Check wedi'i ddwyn ynghyd â rheol agored yn dal i ollwng data), ond mae'n rhwystro sganiau allanol cyfleus.
A all y sganiwr ganfod cam-gyfluniadau rheolau rhannol (darllen ar agor, ysgrifennu ar gau)?
Ydy — mae pob rheol (allow read, allow write) yn cael ei harchwilio ar wahân. Mae archwiliad darllen-yn-unig sy'n llwyddo gyda 200 OK yn adrodd canfyddiad darllen agored hyd yn oed os yw ysgrifenniadau'n cael eu gwadu. Mae'r ddau ganfyddiad yn benodol: mae alldynnu data a thrin data yn risgiau ar wahân.
A yw hyn yn gweithio ar gyfer apiau Firebase a leolwyd o dan barth wedi'i deilwra?
Ydy. Mae'r sganiwr yn echdynnu prosiect ID Firebase o'r bwndel a leolwyd, nid o'r parth. Mae parthau wedi'u teilwra, is-barthau app.web.app, ac apiau Firebase a hostiwyd eu hunain i gyd yn gweithio yn yr un ffordd cyn belled â bod y bwndel JavaScript yn gyrraedd.
Camau nesaf
Rheda sgan FixVibe am ddim yn erbyn dy URL cynhyrchu — mae'r gwiriad baas.firebase-rules yn llongio ar bob cynllun ac yn fflagio rheolau agored ar draws Firestore, Realtime Database, a Cloud Storage. Am esboniwr dyfnach ar y patrwm allow read, write: if true yn benodol, gweler Firebase allow read, write: if true wedi'i esbonio. Am yr olwg ymbarél ar draws Supabase, Firebase, Clerk, ac Auth0, darllena Sganiwr cam-gyfluniad BaaS.
