// 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 жылдам бастау құжаттамасы интернеттегі ең көп көшірілген ереже блоктарының бірін қамтиды:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}Firebase бұрын осы ережелерге 30 күндік автоматты аяқталу мерзімін қосатын. Бұл өзгерді: бүгін ережелер әзірлеуші оларды алмастырмайынша мәңгі сақталады. ИИ кодтау құралдары — тест-режим блогын қамтитын құжаттаманың жылдарында үйретілген — жиі оны сөзбе-сөз шығарып, әзірлеушіге "бұл сіздің қауіпсіздік ережеңіз" дейді. Олай емес.
Өндірісте пайда болатын, бірақ бірдей рұқсат беруші басқа нұсқалар:
// 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} пайдаланушы қозғай алатын жалғыз құжат болады.
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; } } }. Конвенция: файлдарды users/[uid]/[filename] астында сақтап, жолға иеліктi мәжбүрлету.
service firebase.storage {
match /b/{bucket}/o {
match /users/{userId}/{allPaths=**} {
allow read, write: if request.auth.uid == userId;
}
}
}Ережелерді Firebase CLI арқылы орналастырыңыз: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Жаңа ережелер өндірісте екенін FixVibe сканерлеуін қайта іске қосу арқылы растаңыз — baas.firebase-rules табылған нәтижесі тазалануы керек.
firebase deploy --only firestore:rules
firebase deploy --only database
firebase deploy --only storageБұл Firebase-тің кіріктірілген құралдарымен қалай салыстырылады
Firebase консолі сізге ағымдағы ережелерді көрсетеді, бірақ оларды орындалу уақытының мінез-құлқына қарсы аудит жасамайды. Firebase Rules симуляторы ереже логикасын синтетикалық сұрауларға қарсы тестілеуге мүмкіндік береді — пайдалы, бірақ жергілікті. Ешбір құрал сіздің өндірістік ережелеріңіз жалпыға ортақ интернеттегі анонимді шабуылдаушыға не қайтаратынын айтпайды. FixVibe сияқты сыртқы сканер (немесе қолмен конфигурацияланған Burp Suite) — шабуылдаушы пайдаланатын бірдей бұрыштан зерттейтін жалғыз нәрсе. Google-дің App Check функциясы теріс пайдалануды жұмсартады, бірақ дұрыс шектелген ережелерді алмастырмайды.
Жиі қойылатын сұрақтар
Сканер 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 бумасы қол жетімді болғанша бірдей жұмыс істейді.
Келесі қадамдар
Өндіріс URL мекенжайыңызға қарсы тегін FixVibe сканерлеуін іске қосыңыз — baas.firebase-rules тексеруі әр жоспарда жеткізіледі және Firestore, Realtime Database және Cloud Storage арқылы ашық ережелерді белгілейді. allow read, write: if true үлгісі туралы тереңірек түсіндіру үшін Firebase allow read, write: if true түсіндіруі қараңыз. Supabase, Firebase, Clerk және Auth0 арқылы шатыр көрінісі үшін BaaS қате конфигурациясының сканері оқыңыз.
