Firebase Security Rules hizmetindeki yaygın güvenlik açıklarını anlamak için bu kılavuzu kullanın kurallarınızı inceleyebilir ve daha iyi güvenli hale getirebilir, ve değişikliklerinizi dağıtmadan önce test edin.
Verilerinizin güvenliğinin düzgün şekilde sağlanmadığına dair bir uyarı alırsanız yaygın olarak yapılan bu hataları inceleyip güvenlik açığı olan kuralları güncelleyin.
Firebase Security Rules erişin
Mevcut Rules'inizi görüntülemek için Firebase KSA'yı veya Firebase konsolunu kullanın. Kurallarınızı aynı yöntemi kullanarak düzenlediğinizden emin olun. kullanın. Yerel olarak tanımlanan kurallarınızın en son güncellemeleri yansıtıp yansıtmadığından emin değilseniz Firebase konsolu her zaman Firebase Security Rules'ün en son dağıtılan sürümünü gösterir.
Kurallarınıza Firebase konsolundan erişmek için ve ardından Realtime Database, Cloud Firestore veya Depolama. Doğru veritabanına veya depolama alanına ulaştıktan sonra Kurallar'ı tıklayın.
Kurallarınıza Firebase KSA'dan erişmek için şu sayfaya gidin: firebase.json dosyanızda belirtilen kurallar dosyası.
Firebase Security Rules anlayın
Firebase Security Rules, verilerinizi kötü amaçlı kullanıcılardan korur. Veritabanı oluşturduğunuzda Firebase konsolunda örneği veya Cloud Storage paketini ayarlarsanız şunu yapabilirsiniz: tüm kullanıcılara erişimi reddetmeyi (Kilitli mod) veya tüm kullanıcılara yönelik (Test modu). Geliştirme sırasında daha açık bir yapılandırma isteyebilirsiniz ancak uygulamanızı dağıtmadan önce kurallarınızı doğru şekilde yapılandırdığınızdan ve verilerinizi güvence altına aldığınızdan emin olun.
Uygulamanızı geliştirirken ve kurallarınız için farklı yapılandırmaları test ederken uygulamanızı yerel bir geliştirme ortamında çalıştırmak için yerel Firebase emülatörlerinden birini kullanın.
Güvenli olmayan kurallarla ilgili yaygın senaryolar
Varsayılan olarak veya uygulamanızı geliştirmeye başladığınızda ayarlamış olabileceğiniz Rules, uygulamanızı dağıtmadan önce incelenip güncellenmelidir. Aşağıdaki yaygın hatalardan kaçınarak kullanıcılarınızın verilerini gerektiği gibi koruduğunuzdan emin olun.
Açık erişim
Firebase projenizi ayarlarken kurallarınızı, açılış sayfasına izin verecek şekilde erişebilir. Kendinizi muhtemelen ancak dağıttıysanız internette mevcuttur. Google güvenlik kurallarını yapılandırdıktan sonra da tahminde bulunan herkes verileri çalabilir, değiştirebilir veya silebilir.
Önerilmeyen: Şunlar için okuma ve yazma erişimi:
tüm kullanıcıları kapsar.
Cloud Firestore// Allow read/write access to all users under any conditions // Warning: **NEVER** use this ruleset in production; it allows // anyone to overwrite your entire database. service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } } Realtime Database{ // Allow read/write access to all users under any conditions // Warning: **NEVER** use this ruleset in production; it allows // anyone to overwrite your entire database. "rules": { ".read": true, ".write": true } } Cloud Storage// Anyone can read or write to the bucket, even non-users of your app. // Because it is shared with App Engine, this will also make // files uploaded via App Engine public. // Warning: This rule makes every file in your Cloud Storage bucket accessible to any user. // Apply caution before using it in production, since it means anyone // can overwrite all your files. service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write; } } } |
Çözüm: Okuma ve veri işlemeyi kısıtlayan kurallar
yazma erişimi.
Veri hiyerarşiniz için anlamlı olacak kurallar oluşturun. Bu güvensizliğin yaygın çözümlerinden biri, Firebase Authentication ile kullanıcıya dayalı güvenliktir. Daha fazla bilgi kurallarla kullanıcı kimliklerini doğrulama hakkında Cloud FirestoreRealtime DatabaseCloud Storage |
Kimliği doğrulanmış tüm kullanıcılar için erişim
Rules bazen bir kullanıcının giriş yapıp yapmadığını kontrol ediyor ancak başka bir işlem yapmıyor
bu kimlik doğrulamasına göre erişimi kısıtlayabilir. Kurallarınızdan biri auth != null
içeriyorsa oturum açmış tüm kullanıcıların verilere erişmesini istediğinizi onaylayın.
Önerilmez: Giriş yapan tüm kullanıcılar veritabanınızın tamamına okuma ve yazma erişimine sahiptir.
Cloud Firestoreservice cloud.firestore { match /databases/{database}/documents { match /some_collection/{document} { allow read, write: if request.auth.uid != null; } } } Realtime Database{ "rules": { ".read": "auth.uid !== null", ".write": "auth.uid !== null" } } Cloud Storage// Only authenticated users can read or write to the bucket service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } } |
Çözüm: Güvenlik koşullarını kullanarak erişimi daraltın.
Kimlik doğrulamayı kontrol ederken, belirli veri kümeleri için belirli kullanıcılara erişimi daha da kısıtlamak amacıyla kimlik doğrulama özelliklerinden birini de kullanabilirsiniz. Farklı gezinme seçenekleri hakkında daha fazla bilgi kimlik doğrulama özelliklerini kullananlar için de geçerlidir. Cloud FirestoreRealtime DatabaseCloud Storage |
(Realtime Database) Yanlış devralınan kurallar
Daha yüzeysel kurallarda kuralların geçersiz kılındığı Realtime Database Security Rules basamaklama alt düğümlerde daha iyi kontrol edebilirsiniz. Bir alt düğümde kural yazarken bu kuralın yalnızca ek ayrıcalıklar verebileceğini unutmayın. Hassaslaştırılamaz veya iptal edilemez verilere erişmenize olanak tanır.
Önerilmez: Alt yollarda kuralları hassaslaştırma
{ "rules": { "foo": { // allows read to /foo/* ".read": "data.child('baz').val() === true", "bar": { /* ignored, since read was allowed already */ ".read": false } } } } |
Çözüm: Üst yollara kural yazma geniş kapsamlıdır ve alt yollarda daha spesifik ayrıcalıklar tanır Veri erişimi ihtiyaçlarınız daha fazla ayrıntı gerektiriyorsa kurallarınızı ayrıntılı tutun. Realtime Database Security Rules içinde basamaklama hakkında daha fazla bilgi edinin. Çekirdek Realtime Database Security Rules söz dizimi. |
Kapalı erişim
Uygulamanızı geliştirirken yaygın olarak kullanılan bir diğer yaklaşım da verilerinizi kilitli tutmaktır. Genellikle bu, okuma ve yazma özelliğini devre dışı bıraktığınız tüm kullanıcılara erişim için aşağıdaki adımları uygulayın:
Cloud Firestore
// Deny read/write access to all users under any conditions service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }
Realtime Database
{ "rules": { ".read": false, ".write": false } }
Cloud Storage
// Access to files through Cloud Storage is completely disallowed. // Files may still be accessible through App Engine or Google Cloud Storage APIs. service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if false; } } }
Firebase Admin SDK'ları ve Cloud Functions, Cloud Firestore veya Yalnızca sunucu olarak Realtime Database Firebase ile bağlantılı arka uç Yönetici SDK'si. Güvenli olsa da, uygulamanızın istemcilerinin güvenli olup olmadığını verileri düzgün şekilde alabilir.
Cloud Firestore Security Rules ve nasıl çalıştığı hakkında daha fazla bilgi Cloud Firestore Security Rules Kullanmaya Başlama.
Cloud Firestore Security Rules cihazınızı test edin
Uygulamanızın davranışını kontrol etmek ve Cloud Firestore Security Rules yapılandırmalarınızı doğrulamak için: Firebase Emulator'ı kullanın. Herhangi bir değişiklik dağıtmadan önce yerel bir ortamda birim testlerini çalıştırmak ve otomatikleştirmek için Cloud Firestoreemülatörünü kullanın.
Firebase Security Rules adresini Firebase konsolunda hızlıca doğrulamak için şunu kullanın: Firebase Kuralları Simülatörü.