// docs / baas security / firebase rules scanner
Firebase qaydaları skaneri: açıq Firestore, Realtime Database və Storage qaydalarını tapın
Firebase tətbiqləri ardıcıl bir şəkildə təhlükəsizlikdə uğursuz olur: test-rejim quickstart-dan qalan <code>allow read, write: if true;</code> qaydaları produksiyadan əvvəl heç vaxt dəyişdirilmir. AI kodlaşdırma alətləri bu qaydaları sənədləşmə nümunələrindən hərfi-hərfinə yaradır və tərtibatçını möhkəmləndirmək üçün nadirən təşviq edir. Bu məqalə Firebase qaydaları skanerinin Firestore, Realtime Database və Cloud Storage-də açıq qaydaları layihə xaricindən necə aşkar etdiyini — və tapdığını necə düzəltməyi göstərir.
Skaner açıq Firebase qaydalarını necə tapır
Firebase xidmətləri yaxşı tanınan, proqnozlaşdırıla bilən URL formaları təqdim edir. Etimadnaməsiz bir skaner hər birini zondlaya və anonim oxumaların uğurlu olub-olmadığını müşahidə edə bilər. FixVibe baas.firebase-rules yoxlaması hər Firebase xidməti üçün bir tane olmaqla üç müstəqil zondda işləyir:
- <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. Skaner
https://[project-id]-default-rtdb.firebaseio.com/.json-u zondlayır. Kök anonim olaraq oxunabilirsə, cavab JSON kimi bütün verilənlər bazası ağacıdır. Daha mühafizəkar bir test.json?shallow=truesorğusu göndərir, yalnız üst-səviyyə açarları qaytarır — hər iki halda bu bir tapıntıdır. - Cloud Storage. Skaner
https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o-ya sorğu göndərir. Cavab identifikasiya olmadan fayl adlarını sadalayırsa, bucket anon-listələnə biləndir. Listələnə bilən storage, fərdi fayl yükləmələri rədd edilsə belə tapıntıdır — hücumçular təxmin oluna bilən fayl adlarını tapmaq üçün bucket-i sıralayır.
Test-rejim tələsi əslində necə görünür
Firebase-in quickstart sənədləşməsi internetdə ən çox kopyalanan qayda bloklarından birini ehtiva edir:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}Firebase əvvəllər bu qaydalara avtomatik 30 günlük bitmə müddəti əlavə edirdi. Bu dəyişdi: bu gün tərtibatçı onları əvəz etmədikcə qaydalar həmişəlik qalır. AI kodlaşdırma alətləri — illərlə test-rejim blokunu ehtiva edən sənədlər üzərində təlim keçmiş — onu tez-tez hərfi-hərfinə yayımlayır və tərtibatçıya "bu sizin təhlükəsizlik qaydanızdır" deyir. Belə deyil.
Produksiyada görünən, lakin eyni dərəcədə icazə verici olan digər variantlar:
// 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;
- Gələcək-zaman möhürü varianti: gələcəkdə uzaq bir tarixə qədər hər şeyə icazə verən bir qayda. Heç vaxt effektiv olaraq bitmir (yuxarıda vurğulanan bloka baxın).
allow read: if true; allow write: if request.auth != null;— ictimai oxumalar, hər identifikasiya olunmuş istifadəçi yaza bilər.allow read, write: if request.auth != null;— hər giriş etmiş istifadəçi başqa istifadəçilərin məlumatları daxil olmaqla istənilən sənədi oxuya və yaza bilər.
Skaner açıq qayda tapdıqda nə etməli
Açıq Firebase qaydaları işləyiş zamanı təcili haldır. Düzəliş üç xidmətin hamısında eyni formadadır: hər qaydanı açıq sahib sahəsi qarşısında request.auth.uid-ə əhatəli edin. Hər xidmətin öz qayda sintaksisi var:
Firestore
match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Yol seqmenti bağlanması {userId} istifadəçinin toxuna biləcəyi yeganə sənəd olur.
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; } } }. Konvensiya: faylları users/[uid]/[filename] altında saxlayın və yolun sahibliyi tətbiq etməsinə icazə verin.
service firebase.storage {
match /b/{bucket}/o {
match /users/{userId}/{allPaths=**} {
allow read, write: if request.auth.uid == userId;
}
}
}Qaydaları Firebase CLI vasitəsilə deploy edin: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Yeni qaydaların produksiyada olduğunu FixVibe skanını yenidən işlədərək doğrulayın — baas.firebase-rules tapıntısı təmizlənməlidir.
firebase deploy --only firestore:rules
firebase deploy --only database
firebase deploy --only storageBu Firebase-in daxili alətləri ilə necə müqayisə olunur
Firebase Console sizə cari qaydaları göstərir, lakin onları işləyiş davranışına qarşı audit etmir. Firebase Rules simulatoru sintetik sorğulara qarşı qayda məntiqini test etməyə imkan verir — faydalı, lakin lokal. Heç bir alət sizə produksiya qaydalarınızın ictimai internetdə anonim hücumçuya əslində nə qaytardığını bildirmir. FixVibe (və ya manual konfiqurasiya ilə Burp Suite) kimi xarici bir skaner, hücumçu kimi eyni bucaqdan zondlayan yeganə şeydir. Google-un öz App Check-i sui-istifadəni azaldır, lakin düzgün əhatəli qaydaları əvəz etmir.
Tez-tez verilən suallar
Skaner Firestore məlumatlarımı oxuyacaq və ya dəyişəcəkmi?
Passiv skanlar qaydaların icazə verib-vermədiyini təsdiqləmək üçün hər xidmətdə ən çox bir anonim oxuma sorğusu göndərir. Skaner cavab formasını və məlumatın olub-olmadığını qeyd edir — səhifələmir, sənədləri sıralamır və yazmır. Yazma zondları təsdiqlənmiş domen sahibliyi ilə bağlıdır və heç vaxt təsdiqlənməmiş hədəflərə qarşı işləmir.
Firebase layihəm App Check istifadə edirsə nə olar?
App Check identifikasiya olunmamış sorğuları 403 ilə rədd edir. App Check token-i olmayan skaner hər zondda 403 görəcək — bu, düzgün nəticədir. App Check qayda düzgünlüyünün əvəzi deyil (oğurlanmış App Check token-i və açıq qayda hələ də məlumat sızdırır), lakin opportunist xarici skanları bloklayır.
Skaner qismən qayda səhv konfiqurasiyalarını (oxuma açıq, yazma bağlı) aşkar edə bilərmi?
Bəli — hər qayda (allow read, allow write) ayrıca zondlanır. 200 OK ilə uğurlu olan yalnız-oxuma zondu yazmalar rədd edilsə belə açıq-oxuma tapıntısı bildirir. İki tapıntı fərqlidir: məlumat oğurluğu və məlumat manipulyasiyası ayrı risklərdir.
Bu, xüsusi domen altında deploy olunmuş Firebase tətbiqləri üçün işləyirmi?
Bəli. Skaner Firebase layihə ID-sini domendən deyil, deploy olunmuş bundle-dan çıxarır. Xüsusi domenlər, app.web.app subdomain-ləri və öz-yerləşdirilmiş Firebase tətbiqləri, JavaScript bundle-ə əlçatan olduğu müddətcə eyni şəkildə işləyir.
Sonrakı addımlar
Produksiya URL-inizə qarşı pulsuz bir FixVibe skanı işlədin — baas.firebase-rules yoxlaması hər planda gəlir və Firestore, Realtime Database və Cloud Storage üzrə açıq qaydaları işarələyir. Xüsusilə allow read, write: if true nümunəsi üzrə daha dərin izahat üçün Firebase allow read, write: if true izahı oxuyun. Supabase, Firebase, Clerk və Auth0 üzrə ümumi baxış üçün BaaS səhv konfiqurasiya skaneri oxuyun.
