FixVibe

// docs / baas security / firebase rules scanner

Сканер правіл Firebase: знайдзіце адкрытыя правілы Firestore, Realtime Database і Storage

Праграмы Firebase правальваюць бяспеку аднолькавым чынам: правілы <code>allow read, write: if true;</code>, якія засталіся ад хуткага старту тэставага рэжыму, ніколі не замененыя перад прадакшэнам. ШІ-інструменты кадавання генеруюць гэтыя правілы даслоўна з прыкладаў дакументацыі і рэдка падахвочваюць распрацоўшчыка ўзмацніць іх. Гэты артыкул паказвае, як сканер правіл Firebase выяўляе адкрытыя правілы ў Firestore, Realtime Database і Cloud Storage звонку праекта — і як выправіць тое, што ён знаходзіць.

Як сканер знаходзіць адкрытыя правілы Firebase

Сэрвісы Firebase раскрываюць добра вядомыя, прадказальныя формы URL. Сканер без уліковых дадзеных можа зандаваць кожны і назіраць, ці ўдаюцца ананімныя чытанні. Праверка FixVibe baas.firebase-rules запускаецца ў трох незалежных зондах — па адным на кожны сэрвіс 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. Сканер зандуе https://[project-id]-default-rtdb.firebaseio.com/.json. Калі корань чытаецца ананімна, адказ — гэта ўсё дрэва базы дадзеных у JSON. Больш кансерватыўны тэст запытвае .json?shallow=true, які вяртае толькі ключы верхняга ўзроўню — знаходка ў любым выпадку.
  • Cloud Storage. Сканер запытвае https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o. Калі адказ пералічвае імёны файлаў без аўтэнтыфікацыі, сховішча anon-пералічальнае. Пералічальнае сховішча — гэта знаходка, нават калі ўзятыя загрузкі асобных файлаў адхіляюцца — зламыснікі пералічваюць сховішча, каб знайсці ўгадваемыя імёны файлаў.

Як выглядае гэты падвох тэставага рэжыму

Дакументацыя хуткага старту Firebase змяшчае адзін з найбольш капіруемых блокаў правіл у інтэрнэце:

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

Раней Firebase дадаваў аўтаматычны 30-дзённы тэрмін дзеяння на гэтыя правілы. Гэта змянілася: сёння правілы захоўваюцца назаўжды, калі распрацоўшчык іх не заменіць. ШІ-інструменты кадавання — навучаныя на гадах дакументацыі, якая ўключае блок тэставага рэжыму — часта выпускаюць яго даслоўна і кажуць распрацоўшчыку "гэта ваша правіла бяспекі". Гэта не так.

Іншыя варыянты, якія з'яўляюцца ў прадакшэне, але аднолькава дазвольныя:

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;
  • Варыянт з будучай часавай меткай: правіла, якое дазваляе ўсё да даты ў далёкай будучыні. Ніколі эфектыўна не сканчае дзеянне (гл. падсветлены блок вышэй).
  • allow read: if true; allow write: if request.auth != null; — публічныя чытанні, любы аўтэнтыфікаваны карыстальнік можа пісаць.
  • allow read, write: if request.auth != null; — любы карыстальнік, які ўвайшоў, можа чытаць або пісаць любы дакумент, у тым ліку дадзеныя іншых карыстальнікаў.

Што рабіць, калі сканер знаходзіць адкрытае правіла

Адкрытыя правілы Firebase — гэта надзвычайная сітуацыя ў часе выканання. Выпраўленне мае тую ж форму ва ўсіх трох сэрвісах: абмяжуйце кожнае правіла request.auth.uid супраць відавочнага поля ўладальніка. Кожны сэрвіс мае свой сінтаксіс правіл:

Firestore

match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Прывязка сегмента шляху {userId} становіцца адзіным дакументам, да якога карыстальнік можа дакранацца.

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; } } }. Канвенцыя: захоўвайце файлы пад users/[uid]/[filename] і дазвольце шляху забяспечваць валоданне.

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

Разгарніце правілы праз CLI Firebase: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Пацвердзіце, што новыя правілы знаходзяцца ў прадакшэне, паўторна запусціўшы сканаванне FixVibe — знаходка baas.firebase-rules павінна знікнуць.

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

Як гэта параўноўваецца з убудаванымі інструментамі Firebase

Кансоль Firebase паказвае вам бягучыя правілы, але не правярае іх супраць паводзін у часе выканання. Сімулятар правіл Firebase дазваляе вам тэставаць логіку правіл супраць сінтэтычных запытаў — карысна, але лакальна. Ніводны інструмент не паведамляе вам, што вашы прадукцыйныя правілы насамрэч вяртаюць ананімнаму зламысніку ў публічным інтэрнэце. Знешні сканер, такі як FixVibe (або Burp Suite з ручной канфігурацыяй), — гэта адзінае, што зандуе пад тым самым вуглом, што і зламыснік. Уласны App Check ад Google змякчае злоўжыванне, але не замяняе правільна абмежаваныя правілы.

Часта задаваныя пытанні

Ці чытае або змяняе сканер мае дадзеныя Firestore?

Пасіўныя сканаванні выдаюць максімум адно ананімнае чытанне на сэрвіс, каб пацвердзіць, ці дазваляюць правілы яго. Сканер запісвае форму адказу і наяўнасць дадзеных — ён не разбівае на старонкі, не пералічвае дакументы і не піша. Зонды запісу абмежаваны пацверджаным валоданнем даменам і ніколі не запускаюцца супраць непацверджаных мэт.

А што, калі мой праект Firebase выкарыстоўвае App Check?

App Check адхіляе неаўтэнтыфікаваныя запыты з 403. Сканер без токена App Check будзе бачыць 403 на кожным зондзе — што і ёсць правільны вынік. App Check не з'яўляецца заменай правільнасці правіл (украдзены токен App Check плюс адкрытае правіла ўсё яшчэ выцякаюць дадзеныя), але ён блакуе апартуністычныя знешнія сканаванні.

Ці можа сканер выявіць частковыя няправільныя налады правіл (адкрытае чытанне, закрыты запіс)?

Так — кожнае правіла (allow read, allow write) зандуецца асобна. Зонд толькі для чытання, які паспяхова вяртае 200 OK, паведамляе пра знаходку адкрытага чытання, нават калі запісы адхіляюцца. Дзве знаходкі розныя: эксфільтрацыя дадзеных і маніпуляцыя дадзенымі — розныя рызыкі.

Ці працуе гэта для праграм Firebase, разгорнутых пад карыстальніцкім даменам?

Так. Сканер вылучае ідэнтыфікатар праекта Firebase з разгорнутага бандла, а не з дамена. Карыстальніцкія дамены, паддамены app.web.app і самаразмеркаваныя праграмы Firebase усе працуюць аднолькава, пакуль JavaScript-бандл дасягальны.

Наступныя крокі

Запусціце бясплатнае сканаванне FixVibe супраць вашага прадукцыйнага URL — праверка baas.firebase-rules пастаўляецца на кожным тарыфе і пазначае адкрытыя правілы ў Firestore, Realtime Database і Cloud Storage. Для больш глыбокага тлумачэння канкрэтна пра шаблон allow read, write: if true гл. Firebase allow read, write: if true растлумачана. Для агульнага агляду па Supabase, Firebase, Clerk і Auth0 прачытайце Сканер няправільных налад BaaS.

// скануйце вашу baas-паверхню

Знайдзіце адкрытую табліцу раней, чым гэта зробіць хтосьці іншы.

Увядзіце прадукцыйны URL. FixVibe пералічыць пастаўшчыкоў BaaS, з якімі ўзаемадзейнічае ваша праграма, здыме адбіткі з іх публічных канчатковых кропак і паведаміць, што неаўтарызаваны кліент можа прачытаць або запісаць. Бясплатна, без устаноўкі, без карты.

  • Бясплатны тарыф — 3 сканаванні ў месяц, без карты пры рэгістрацыі.
  • Пасіўнае зняцце адбіткаў BaaS — не патрэбна праверка валодання даменам.
  • Supabase, Firebase, Clerk, Auth0, Appwrite і іншыя.
  • Падказкі выпраўлення ШІ для кожнай знаходкі — устаўце назад у Cursor / Claude Code.
Запусціць бясплатнае сканаванне BaaS

рэгістрацыя не патрабуецца

Сканер правіл Firebase: знайдзіце адкрытыя правілы Firestore, Realtime Database і Storage — Docs · FixVibe