// docs / baas security / firebase rules scanner
Firebase rules scanner៖ រកច្បាប់ Firestore, Realtime Database និង Storage បើកចំហ
កម្មវិធី Firebase បរាជ័យសុវត្ថិភាពតាមរបៀបជាប់លាប់មួយ៖ ច្បាប់ <code>allow read, write: if true;</code> ដែលនៅសល់ពី quickstart test-mode, មិនដែលត្រូវបានជំនួសមុនផលិតកម្ម។ ឧបករណ៍សរសេរកូដ AI បង្កើតច្បាប់ទាំងនេះច្បាស់ៗពីឧទាហរណ៍ documentation និងកម្រនឹងជំរុញឱ្យអ្នកអភិវឌ្ឍន៍ពង្រឹងពួកវា។ អត្ថបទនេះបង្ហាញពីរបៀបដែល Firebase rules scanner រកឃើញច្បាប់បើកចំហនៅទូទាំង Firestore, Realtime Database និង Cloud Storage ពីខាងក្រៅ project — និងរបៀបជួសជុលអ្វីដែលវារកឃើញ។
របៀបដែល scanner រកច្បាប់ Firebase បើកចំហ
សេវាកម្ម Firebase បង្ហាញរូបរាង URL ដែលគេស្គាល់ យាងអាចទាយបាន។ Scanner ដែលគ្មាន credential អាចត្រួតពិនិត្យសេវាកម្មនីមួយៗ និងសង្កេតថាការអាន anonymous ជោគជ័យ ឬអត់។ ការត្រួតពិនិត្យ 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។ Scanner ត្រួតពិនិត្យ
https://[project-id]-default-rtdb.firebaseio.com/.json។ បើ root អាចអានបាន anonymous, response គឺជាដើមឈើ database ទាំងមូលជា JSON។ ការសាកល្បងបន្ថែមប្រុងប្រយ័ត្ន query.json?shallow=true, ដែលត្រឡប់តែ key កម្រិតខ្ពស់ប៉ុណ្ណោះ — finding ដែរក្នុងករណីណាក៏ដោយ។ - Cloud Storage។ Scanner query
https://firebasestorage.googleapis.com/v0/b/[project-id].appspot.com/o។ បើ response រាយឈ្មោះឯកសារដោយគ្មាន authentication, bucket អាចរាយ anon។ Storage ដែលអាចរាយគឺជា finding សូម្បីពេលការទាញយកឯកសារផ្ដាច់មុខត្រូវបានបដិសេធ — អ្នកវាយប្រហារ enumerate bucket ដើម្បីរកឈ្មោះឯកសារដែលអាចទាយបាន។
ប្រសិទ្ធភាពពិតប្រាកដនៃ test-mode footgun
Documentation quickstart របស់ Firebase រួមមាន rule block មួយក្នុងចំណោម block ដែលគេចម្លងច្រើនបំផុតនៅលើអ៊ីនធឺណិត៖
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}Firebase ធ្លាប់បន្ថែមការផុតកំណត់ 30 ថ្ងៃដោយស្វ័យប្រវត្តិលើច្បាប់ទាំងនេះ។ នោះបានផ្លាស់ប្ដូរ៖ បច្ចុប្បន្នច្បាប់នៅជារៀងរហូតលុះត្រាតែអ្នកអភិវឌ្ឍន៍ជំនួសវា។ ឧបករណ៍សរសេរកូដ AI — ដោយបានបង្វឹកលើ documentation រាប់ឆ្នាំដែលរួមមាន test-mode block — ច្រើនបញ្ចេញវាច្បាស់ៗ និងប្រាប់អ្នកអភិវឌ្ឍន៍ "នេះគឺជាច្បាប់សុវត្ថិភាពរបស់អ្នក។" វាមិនមែនទេ។
Variant ផ្សេងទៀតដែលលេចឡើងនៅក្នុងផលិតកម្ម តែមានការអនុញ្ញាតស្មើគ្នា៖
// 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;
- Variant timestamp អនាគត៖ ច្បាប់ដែលអនុញ្ញាតគ្រប់យ៉ាងរហូតដល់ថ្ងៃឆ្ងាយនៅក្នុងអនាគត។ មិនដែលផុតកំណត់ប្រកបដោយប្រសិទ្ធភាព (សូមមើល block ដែលបង្ហាញពន្លឺខាងលើ)។
allow read: if true; allow write: if request.auth != null;— អានសាធារណៈ, អ្នកប្រើ authenticated ណាមួយអាចសរសេរ។allow read, write: if request.auth != null;— អ្នកប្រើដែលចូលណាមួយអាចអាន ឬសរសេរឯកសារណាមួយ រួមទាំងទិន្នន័យរបស់អ្នកប្រើផ្សេង។
អ្វីដែលត្រូវធ្វើនៅពេល scanner រកឃើញច្បាប់បើកចំហ
ច្បាប់ Firebase បើកចំហគឺជាគ្រោះមហន្តរាយ runtime។ ការជួសជុលគឺមានរូបរាងដូចគ្នានៅទូទាំងសេវាកម្មទាំងបី៖ កំណត់ scope រាល់ច្បាប់ទៅ request.auth.uid ប្រឆាំងនឹង field ម្ចាស់ច្បាស់លាស់។ សេវាកម្មនីមួយៗមាន syntax ច្បាប់ផ្ទាល់របស់វា៖
Firestore
match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }។ ការចង path-segment {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] និងអនុញ្ញាតផ្លូវអនុវត្តភាពជាម្ចាស់។
service firebase.storage {
match /b/{bucket}/o {
match /users/{userId}/{allPaths=**} {
allow read, write: if request.auth.uid == userId;
}
}
}Deploy ច្បាប់តាមរយៈ Firebase CLI៖ firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage។ ផ្ទៀងផ្ទាត់ថាច្បាប់ថ្មីនៅក្នុងផលិតកម្មដោយដំណើរការ FixVibe scan ឡើងវិញ — finding baas.firebase-rules គួរត្រូវលុបបំបាត់។
firebase deploy --only firestore:rules
firebase deploy --only database
firebase deploy --only storageរបៀបនេះប្រៀបធៀបជាមួយឧបករណ៍ Firebase ដែលមានស្រាប់
Firebase Console បង្ហាញអ្នកនូវច្បាប់បច្ចុប្បន្ន តែមិនត្រួតពិនិត្យពួកវាប្រឆាំងនឹងឥរិយាបថ runtime ឡើយ។ Firebase Rules simulator អនុញ្ញាតឱ្យអ្នកសាកល្បងតក្កច្បាប់ប្រឆាំងនឹង request សំយោគ — មានប្រយោជន៍ តែជាមូលដ្ឋាន។ ឧបករណ៍មួយណាក៏មិនប្រាប់អ្នកថាច្បាប់ផលិតកម្មរបស់អ្នកត្រឡប់អ្វីពិតប្រាកដទៅអ្នកវាយប្រហារ anonymous នៅលើអ៊ីនធឺណិតសាធារណៈ។ Scanner ខាងក្រៅដូចជា FixVibe (ឬ Burp Suite ជាមួយការកំណត់រចនាសម្ព័ន្ធដោយដៃ) គឺជាអ្វីដែលត្រួតពិនិត្យពីមុំដូចគ្នាដែលអ្នកវាយប្រហារនឹង។ App Check របស់ Google កាត់បន្ថយការរំលោភ តែមិនជំនួសច្បាប់ដែល scope ត្រឹមត្រូវឡើយ។
សំណួរសួរញឹកញាប់
តើ scanner អាន ឬកែប្រែទិន្នន័យ Firestore របស់ខ្ញុំទេ?
Passive scan ផ្ញើច្រើនបំផុតមួយការអាន anonymous ក្នុងសេវាកម្មនីមួយៗដើម្បីបញ្ជាក់ថាច្បាប់អនុញ្ញាតវាឬអត់។ Scanner កត់ត្រារូបរាង response និងវត្តមាននៃទិន្នន័យ — វាមិន paginate, មិន enumerate ឯកសារ និងមិនសរសេរឡើយ។ Probe សរសេរត្រូវបានរារាំងនៅពីក្រោយការផ្ទៀងផ្ទាត់ភាពជាម្ចាស់ domain ហើយមិនដែលដំណើរការប្រឆាំងនឹង target ដែលមិនបានផ្ទៀងផ្ទាត់ឡើយ។
ចុះបើ Firebase project របស់ខ្ញុំប្រើ App Check?
App Check បដិសេធ request ដែលមិនបាន authenticate ជាមួយ 403។ Scanner ដែលគ្មាន token App Check នឹងឃើញ 403 លើ probe រាល់ — ដែលជាលទ្ធផលត្រឹមត្រូវ។ App Check មិនមែនជាការជំនួសសម្រាប់ភាពត្រឹមត្រូវនៃច្បាប់ឡើយ (token App Check ដែលលួច បូកនឹងច្បាប់បើកចំហនៅតែលេចធ្លាយទិន្នន័យ), តែវារារាំង scan ខាងក្រៅឱកាសនិយម។
តើ scanner អាចរកឃើញការកំណត់រចនាសម្ព័ន្ធច្បាប់មិនពេញលេញ (អានបើក, សរសេរបិទ) ទេ?
បាទ/ចាស — ច្បាប់នីមួយៗ (allow read, allow write) ត្រូវបានត្រួតពិនិត្យដោយឡែកៗ។ Probe អានតែប៉ុណ្ណោះដែលជោគជ័យជាមួយ 200 OK រាយការណ៍ finding អានបើកសូម្បីពេលការសរសេរត្រូវបានបដិសេធ។ Finding ទាំងពីរគឺផ្សេងគ្នា៖ data exfiltration និង data manipulation គឺជាហានិភ័យដាច់ដោយឡែក។
តើនេះដំណើរការសម្រាប់កម្មវិធី Firebase ដែល deploy ក្រោម domain custom ទេ?
បាទ/ចាស។ Scanner ស្រង់ Firebase project ID ពី bundle ដែលបាន deploy មិនមែនពី domain ឡើយ។ Domain custom, subdomain app.web.app និងកម្មវិធី Firebase self-hosted ដំណើរការដូចគ្នាដរាបណា JavaScript bundle អាចទាក់ទងបាន។
ជំហានបន្ទាប់
ដំណើរការ FixVibe scan ឥតគិតថ្លៃប្រឆាំងនឹង URL ផលិតកម្មរបស់អ្នក — ការត្រួតពិនិត្យ baas.firebase-rules ship លើគ្រប់ plan និងសម្គាល់ច្បាប់បើកចំហនៅទូទាំង Firestore, Realtime Database និង Cloud Storage។ សម្រាប់ការពន្យល់ស៊ីជម្រៅអំពីលំនាំ allow read, write: if true ជាក់លាក់, សូមមើល Firebase allow read, write: if true ពន្យល់។ សម្រាប់ទិដ្ឋភាពទូទៅនៅទូទាំង Supabase, Firebase, Clerk និង Auth0, សូមអាន BaaS misconfiguration scanner។
