Firebase Güvenlik Kuralları yapılandırmalarındaki yaygın güvenlik açıklarını anlamak, kendi kurallarınızı gözden geçirip daha iyi güvenlik altına almak ve değişikliklerinizi dağıtmadan önce test etmek için bu kılavuzu kullanın.
Verilerinizin düzgün bir şekilde korunmadığına dair bir uyarı alırsanız sık yapılan bu hataları gözden geçirin ve güvenlik açığı bulunan kuralları güncelleyin.
Firebase Güvenlik Kurallarınıza erişin
Mevcut Kurallarınızı görüntülemek için Firebase CLI'yi veya Firebase konsolunu kullanın. Güncellemelerin yanlışlıkla üzerine yazılmasını önlemek için kurallarınızı tutarlı bir şekilde aynı yöntemi kullanarak düzenlediğinizden emin olun. Yerel olarak tanımlanmış kurallarınızın en son güncellemeleri yansıtıp yansıtmadığından emin değilseniz Firebase konsolu her zaman Firebase Güvenlik Kurallarınızın en son dağıtılan sürümünü gösterir.
Kurallarınıza Firebase konsolundan erişmek için projenizi seçin, ardından Realtime Database , Cloud Firestore veya Storage bölümüne gidin. Doğru veritabanına veya depolama grubuna girdikten sonra Kurallar'a tıklayın.
Kurallarınıza Firebase CLI'den erişmek için firebase.json dosyanızda belirtilen kurallar dosyasına gidin.
Firebase Güvenlik Kurallarını Anlayın
Firebase Güvenlik Kuralları, verilerinizi kötü niyetli kullanıcılardan korur. Firebase konsolunda bir veritabanı örneği veya Bulut Depolama bölümü oluşturduğunuzda, tüm kullanıcıların erişimini reddetmeyi ( Kilitli mod ) veya tüm kullanıcılara erişim vermeyi ( Test modu ) seçebilirsiniz. Geliştirme sırasında daha açık bir yapılandırma isteyebilirsiniz ancak uygulamanızı dağıtmadan önce kurallarınızı düzgün bir şekilde yapılandırmak ve verilerinizin güvenliğini sağlamak için zaman ayırdığı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 kurallara sahip yaygın senaryolar
Varsayılan olarak ayarlamış olabileceğiniz veya başlangıçta uygulamanızı geliştirmek için çalıştığınız Kurallar, uygulamanızı dağıtmadan önce incelenmeli ve güncellenmelidir. Aşağıdaki yaygın tuzaklardan kaçınarak kullanıcılarınızın verilerini uygun şekilde güvence altına aldığınızdan emin olun.
Açık Erişim
Firebase projenizi ayarlarken, geliştirme sırasında açık erişime izin vermek için kurallarınızı belirlemiş olabilirsiniz. Uygulamanızı kullanan tek kişinin siz olduğunuzu düşünebilirsiniz, ancak onu dağıttıysanız, uygulama internette mevcuttur. Kullanıcıların kimliğini doğrulamıyor ve güvenlik kurallarını yapılandırmıyorsanız, proje kimliğinizi tahmin eden herkes verileri çalabilir, değiştirebilir veya silebilir.
Önerilmez: Tüm kullanıcılar için okuma ve yazma erişimi.Bulut 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; } } } Gerçek Zamanlı Veritabanı{ // 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 } } Bulut depolama// 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 yazma erişimini kısıtlayan kurallar. Veri hiyerarşiniz için anlamlı olan kurallar oluşturun. Bu güvensizliğin yaygın çözümlerinden biri, Firebase Authentication ile kullanıcı tabanlı güvenliktir. Kullanıcıların kimliklerini kurallarla doğrulama hakkında daha fazla bilgi edinin. Bulut FirestoreGerçek Zamanlı VeritabanıBulut depolama |
Kimliği doğrulanmış herhangi bir kullanıcı için erişim
Bazen, Kurallar bir kullanıcının oturum açıp açmadığını kontrol eder, ancak bu kimlik doğrulamaya dayalı olarak erişimi daha fazla kısıtlamaz. Kurallarınızdan biri auth != null
içeriyorsa, oturum açmış herhangi bir kullanıcının verilere erişmesini istediğinizi onaylayın.
Önerilmez: Oturum açmış herhangi bir kullanıcı, veritabanınızın tamamına okuma ve yazma erişimine sahiptir.Bulut Firestoreservice cloud.firestore { match /databases/{database}/documents { match /some_collection/{document} { allow read, write: if request.auth.uid != null; } } } Gerçek Zamanlı Veritabanı{ "rules": { ".read": "auth.uid !== null", ".write": "auth.uid !== null" } } Bulut depolama// 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 dar erişim. Kimlik doğrulamayı kontrol ederken, belirli veri kümeleri için belirli kullanıcılara erişimi daha da kısıtlamak için kimlik doğrulama özelliklerinden birini kullanmak isteyebilirsiniz. Farklı kimlik doğrulama özellikleri hakkında daha fazla bilgi edinin. Bulut FirestoreGerçek Zamanlı VeritabanıBulut depolama |
(Gerçek Zamanlı Veritabanı) Yanlış şekilde devralınan kurallar
Gerçek Zamanlı Veritabanı Güvenliği Kuralları, daha yüzeysel kurallarla, üst yolların daha derindeki alt düğümlerdeki kuralları geçersiz kılmasıyla kademeli olarak ilerler. Bir alt düğümde bir kural yazdığınızda, bunun yalnızca ek ayrıcalıklar sağlayabileceğini unutmayın. Veritabanınızdaki daha derin bir yoldaki verilere erişimi iyileştiremez veya iptal edemezsiniz.
Önerilmez:{ "rules": { "foo": { // allows read to /foo/* ".read": "data.child('baz').val() === true", "bar": { /* ignored, since read was allowed already */ ".read": false } } } }alt yollarında kuralları iyileştirme |
Çözüm: Üst yollara geniş olan kurallar yazın ve alt yollarda daha spesifik ayrıcalıklar verin Veri erişimi ihtiyaçlarınız daha fazla ayrıntı gerektiriyorsa, kurallarınızı ayrıntılı tutun. Verilerinizi Güvenli Hale Getirin içinde Gerçek Zamanlı Veritabanı Güvenlik Kurallarını basamaklandırma hakkında daha fazla bilgi edinin. |
Kapalı erişim
Uygulamanızı geliştirirken başka bir yaygın yaklaşım da verilerinizi kilitli tutmaktır. Genellikle bu, tüm kullanıcıların okuma ve yazma erişimini aşağıdaki şekilde kapattığınız anlamına gelir:
Bulut 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; } } }
Gerçek Zamanlı Veritabanı
{ "rules": { ".read": false, ".write": false } }
Bulut depolama
// 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, veritabanınıza erişmeye devam edebilir. Cloud Firestore veya Realtime Database'i Firebase Admin SDK ile birlikte yalnızca sunucu arka ucu olarak kullanmayı planladığınızda bu kuralları kullanın. Güvenli olmasına rağmen, uygulamanızın istemcilerinin verileri düzgün bir şekilde alabildiğini test etmelisiniz.
Cloud Firestore Güvenlik Kuralları ve bunların nasıl çalıştığı hakkında daha fazla bilgiyi Cloud Firestore Güvenlik Kurallarını Kullanmaya Başlayın bölümünde öğrenin.
Cloud Firestore Güvenlik Kurallarınızı Test Edin
Uygulamanızın davranışını kontrol etmek ve Cloud Firestore Güvenlik Kuralları yapılandırmalarınızı doğrulamak için Firebase Emulator'ı kullanın. Herhangi bir değişikliği dağıtmadan önce yerel bir ortamda birim testlerini çalıştırmak ve otomatikleştirmek için Cloud Firestore öykünücüsünü kullanın.
Firebase konsolunda Firebase Güvenlik Kurallarını hızlı bir şekilde doğrulamak için Firebase Kural Simülatörü'nü kullanın.