// docs / baas security / firebase if-true explainer
Firebase allow read, write: if true түсіндірілді: ол не істейді және оны қалай түзетуге болады
<code>allow read, write: if true;</code> — өндірісте ең көп тараған Firebase қате конфигурациясы. Бұл — жаңа дерекқор жасағаныңызда Firebase консолі ұсынатын тест-режим әдепкісі, ИИ кодтау құралдары құжаттамадан қайта генерациялайтын ереже және сіздің бүкіл Firestore дерекқорыңызды интернеттегі кез келген адамға ашатын ереже. Бұл мақала синтаксисті дәл түсіндіреді, осы ереже өмір сүргенде шабуылдаушы не көретінін көрсетеді және сізге әр түрлі пайдалану жағдайларына сәйкес келетін төрт прогрессивті-қатаң алмастыруларды береді.
Синтаксис, жолма-жол
Толық Firestore тест-режим ережелер құжаты — алты жол:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}Декодталды:
rules_version = '2';v2 ережелер қозғалтқышын (ағымдағы) таңдайды. Ескі v1 ережелері ескірген.service cloud.firestoreблокты Firestore-ге шектейді. Realtime Database әр түрлі JSON негізіндегі синтаксисті пайдаланады; Cloud Storageservice firebase.storageпайдаланады.match /databases/{database}/documentsарнайы(default)дерекқорын (көптеген жобаларда тек біреу бар) байланыстырады.match /{document=**}— рекурсивті джокер.**кез келген тереңдіктегі кез келген жолды сәйкестендіреді.{document}мен біріктірілгенде, бұл әр жинақтағы әр құжатты ұстайды — бүкіл дерекқорды басқаратын жалғыз сәйкестік сөйлемі.allow read, write: if true;— ереже денесі. Жәнеread, жәнеwriteрұқсат етілген; шартif true— жақсы, әрқашан ақиқат.readgetжәнеlistоперацияларын қамтиды;writecreate,updateжәнеdeleteқамтиды.
Таза әсер: Firebase жоба идентификаторы және дұрыс SDK бар кез келген клиент кез келген жинақтағы кез келген құжатты оқи немесе жаза алады. Аутентификация қажет емес. Жылдамдық шектеулері мәжбүрленбейді.
Firebase оны неге әдепкі ретінде жіберіп жатыр
Firebase сізді жоба жасағаннан кейін алғашқы 30 секундта кодтауды бастағыңыз келеді. Балама — кез келген оқу немесе жазу жұмыс істегенге дейін сізді дұрыс ереже жазуға мәжбүрлеу — бастауды бөгер еді. Сондықтан консоль дерекқор жасағанда екі опцияны ұсынады: Өндіріс режимі (барлығына тыйым салу, ережелерді сіз жазасыз) немесе Тест режимі (30 күнге барлығына рұқсат беру). Әзірлеушілердің көпшілігі тест режимін басады, содан кейін қайта оралуды ұмытады. Ескі жобаларда 30 күндік таймер болатын; ағымдағы жобаларда автоматты аяқталу мерзімі жоқ шексіз if true ережесі бар.
Құрылымдық мәселе: ИИ кодтау құралдары құжаттама, оқу құралдары және тест-режим ережелерін көрсететін Stack Overflow жауаптарында үйретіледі. Cursor немесе Claude Code-тан "Firebase қалай орнатамын" деп сұрағанда, жауап жиі нақты allow read, write: if true блогын өндірістік ереже сияқты қамтиды. ИИ — және оған шақырылмаған — бұл ереже өндіріс үшін қауіпсіз емес екенін білмейді.
Шабуылдаушы не көреді
Нақты түрде, сіздің Firebase жоба идентификаторыңызды білетін шабуылдаушы (кез келген орналастырылған қолданба бумасынан 30 секундта шығарылатын) және келесіні іске қосатын адам әр жинақтағы әр құжатты тізе алады:
Жалғыз аутентификацияланбаған curl сұрауы әр жинақты санауға жеткілікті. Төмендегі белгіленген блокты қараңыз.
curl 'https://firestore.googleapis.com/v1/projects/[project-id]/databases/(default)/documents:listCollectionIds' \
-X POST \
-H 'Content-Type: application/json' \
-d '{}'Жауап — жоғарғы деңгейлі жинақтардың толық тізімі. Әр жинақ үшін екінші сұрау құжаттарды қайтарады. Бұл жолда жылдамдық шектеуі жоқ, өйткені if true ережелері анонимді трафикті қабылдайды. Біз бір сағатта миллиондаған құжаттары бар Firebase дерекқорларын санағанымызды көрдік.
Жазу жолында: {fields} бар жалғыз POST жаңа құжат жасайды. Шабуылдаушылар жинақтарыңызды қоқыспен ластай алады, Firestore-дан оқитын пайдаланушы-жақтың беттерін бұза алады немесе дерекқорыңызды тегін хабар брокері ретінде пайдалана алады — пайдалану шотыңыз секіреді, тергейсіз, шот мәселені түсіндіреді.
Төрт өндіріс-қауіпсіз алмастыру
Қолданбаңыздың деректер үлгісіне сәйкес келетін алмастыруды таңдаңыз. Барлық төртеуі сізде пайдаланушы аутентификациясы (Firebase Auth немесе Firebase ID токенін шығаратын кез келген провайдер) бар деп болжайды:
1-нұсқа: Пайдаланушыға тиесілі құжаттар
Ең көп тараған SaaS үлгісі. Құжаттар /users/{userId}/... астында өмір сүреді және тек иесі оларды қозғай алады. match /users/{userId}/{document=**} { allow read, write: if request.auth != null && request.auth.uid == userId; }
match /users/{userId}/{document=**} {
allow read, write: if request.auth != null
&& request.auth.uid == userId;
}2-нұсқа: Әр құжатта иесі өрісі
Құжаттар жалпақ жинақтарда (пайдаланушы идентификаторы астында емес) өмір сүргенде, owner_uid өрісін сақтап, оны тексеріңіз. match /posts/{postId} { allow read: if resource.data.public == true || resource.data.owner_uid == request.auth.uid; allow write: if request.auth.uid == resource.data.owner_uid; }
match /posts/{postId} {
allow read: if resource.data.public == true
|| resource.data.owner_uid == request.auth.uid;
allow write: if request.auth.uid == resource.data.owner_uid;
}3-нұсқа: Көп жалгерлі ұйым оқшаулауы
Ұйым ауқымындағы деректері бар B2B SaaS үшін. Әр құжатта org_id өрісін сақтап, оны пайдаланушының арнайы талабына қарсы тексеріңіз. allow read, write: if request.auth.token.org_id == resource.data.org_id;. Тіркелу кезінде Firebase Admin SDK арқылы арнайы талапты орнатуды талап етеді.
allow read, write: if request.auth.token.org_id == resource.data.org_id;
4-нұсқа: Тек оқу үшін жалпыға ортақ мазмұн
Маркетингтік мазмұн, жалпыға ортақ профильдер, өнім каталогтары үшін — шынайы түрде жалпыға ортақ-оқу, бірақ тек-әкімші-жазу болатын кез келген нәрсе. match /products/{productId} { allow read: if true; allow write: if request.auth.token.admin == true; }. admin арнайы талабы тек әкімші тіркелгілерінде орнатылады.
match /products/{productId} {
allow read: if true;
allow write: if request.auth.token.admin == true;
}Жылдам аудит сұрауы
Түзетуге дейін if true шын мәнінде өмір сүріп жатқанын тексеріңіз. Firebase консолін → Firestore → Rules ашып, if true іздеңіз. Оны түсініктемеден тыс кез келген жерде тапсаңыз, ашық-ереже табылған нәтижеңіз бар. Сол UI ішіндегі Rules симуляторы шабуылдаушы сұрауын жергілікті ойнатуға мүмкіндік береді — анонимді GET /users/somebody қойып, симулятор Allowed қайтаратынын растаңыз.
Сыртқы растау: өндіріс URL мекенжайыңызға қарсы FixVibe сканерлеуін іске қосыңыз. baas.firebase-rules тексеруі сіздің Firestore, Realtime Database және Storage ережелеріңізді зерттейді және шабуылдаушы табатын бірдей нәтижені хабарлайды — Firebase консолі көрсететіннен тәуелсіз.
Жиі қойылатын сұрақтар
<code>if true</code> мен <code>if request.auth != null</code> арасындағы айырмашылық қандай?
if true анонимді қол жеткізуге рұқсат береді — интернеттегі кез келген адамға. if request.auth != null кез келген жүйеге кірген пайдаланушыны талап етеді, бұл жақсырақ, бірақ әлі де дұрыс емес: қолданбаңыздың кез келген пайдаланушысы әр басқа пайдаланушының деректерін оқи алады. Өндірістік ережелер request.auth.uid == resource.data.owner_uid немесе соған ұқсас арқылы белгілі бір пайдаланушыға немесе ұйымға шектелуі керек.
Firebase <code>if true</code> ережелерін автоматты түрде аяқтай ма?
Ескі жобаларда (2023 жылға дейін) if true ережелерін if false-қа айналдыратын 30 күндік таймер болатын. Ағымдағы жобаларда — ереже қолмен алмастырылғанша мерзімсіз сақталады. Жобаңызды 2023 жылға дейін жасасаңыз және ережелеріңіз жақсы көрінсе, қос-тексеріңіз: таймер оларды әлдеқашан if false-қа айналдырған болуы мүмкін, бұл сіздің өз қолданбаңызды бөгейді.
Қауіпсіздік торы ретінде болашақ күн уақыт белгісі тексеруін пайдалана аламын ба?
Жоқ — уақыт белгісі шарты қауіпсіздік басқаруы емес. Ол ашық ережені болашақ күнге аяқтайды, бұл сол күнге дейін шабуылдаушыларда толық қол жеткізу бар екенін білдіреді. Және сіз күнді ұмытасыз. if true мәнін уақытпен шектелген емес, аутентификация-шектелген ережемен алмастырыңыз.
Қолданбам шынайы түрде жалпыға ортақ-оқу болса (блог, өнім каталогы) ше?
Сонда тек жалпыға ортақ жинақта allow read: if true; allow write: if false; анық жазыңыз — дерекқорыңыздағы әр жинақта емес. Жинақ бойынша бөлек match сөйлемін пайдаланыңыз және жазылатын ережелерде рекурсивті {document=**} джокерін ешқашан пайдаланбаңыз.
Келесі қадамдар
Өндіріс URL мекенжайыңызға қарсы FixVibe сканерлеуін іске қосыңыз — baas.firebase-rules тексеруі if true қазіргі уақытта жалпыға ортақ интернеттен пайдаланарлық болатынын растайды. Сканер механикасы және Realtime Database мен Storage үшін параллель анықтаулар үшін Firebase ережелері сканері қараңыз. Supabase-тегі эквивалентті қате конфигурация класы үшін Supabase RLS сканері оқыңыз.
