Cloud Firestore Security Rules yapılandırmalarındaki yaygın güvenlik açıklarını anlamak, kendi kurallarınızı inceleyip daha güvenli hale getirmek ve değişikliklerinizi dağıtmadan önce test etmek için bu kılavuzdan yararlanın.
Yapay Zeka Desteği için yapay zeka istemi
Yapay zeka desteği için aşağıdaki istemi yapay zeka kodlama temsilcinize (ör. Android Studio'da Gemini, Antigravity, Claude Code, Codex ve Cursor) kopyalayın. İstemi özelleştirebilir ve temsilcinizle birlikte üzerinde çalışabilirsiniz. Ayrıntılı kurulum bilgileri için Firebase aracı becerileri sayfasını ziyaret edin.
Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me write, validate, and deploy Firebase Security Rules to protect my app's Firestore data.
Cloud Firestore veritabanınızın düzgün şekilde korunmadığına dair bir uyarı alırsanız Cloud Firestore Security Rules kurallarınızı değiştirip test ederek güvenlik açıklarını giderebilirsiniz.
Mevcut güvenlik kurallarınızı görüntülemek için Firebase konsolundaki Kurallar sekmesine gidin.
Cloud Firestore Security Rules verilerinizi anlama
Cloud Firestore Security Rules, verilerinizi kötü amaçlı kullanıcılardan korur. Firebase konsolunda oluşturulan tüm Cloud Firestore örnekleri için varsayılan kurallar, tüm kullanıcıların erişimini reddeder. Uygulamanızı geliştirmek ve veritabanınıza erişmek için bu kuralları değiştirmeniz gerekir. Geliştirme ortamında tüm kullanıcılara genel erişim izni vermeyi düşünebilirsiniz. Ancak uygulamanızı bir üretim ortamına dağıtmadan önce kurallarınızı doğru şekilde yapılandırmak ve verilerinizin güvenliğini sağlamak için zaman ayırın.
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 Cloud Firestore emülatörünü kullanın.
Güvenli olmayan kurallarla ilgili yaygın senaryolar
Varsayılan olarak veya uygulamanızı Cloud Firestore ile geliştirmeye başladığınızda ayarlamış olabileceğiniz Cloud Firestore Security Rules, uygulamanızı dağıtmadan önce incelenmeli ve güncellenmelidir. Aşağıdaki yaygın hatalardan kaçınarak kullanıcılarınızın verilerini uygun şekilde koruduğunuzdan emin olun.
Açık erişim
Cloud Firestore uygulamasını ayarlarken kurallarınızı geliştirme sırasında açık erişime izin verecek şekilde ayarlamış olabilirsiniz. Uygulamanızı yalnızca sizin kullandığınızı düşünebilirsiniz ancak dağıttığınız uygulamalar internette kullanılabilir hale gelir. 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. |
// Allow read/write access to all users under any conditions // Warning: **NEVER** use this rule set in production; it allows // anyone to overwrite your entire database. service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }
|
Çözüm: Okuma ve yazma erişimini kısıtlayan kurallar.
Veri hiyerarşinize uygun kurallar oluşturun. Bu güvensizliğin yaygın çözümlerinden biri, Firebase Authentication ile kullanıcı tabanlı güvenliktir. Kullanıcıların kurallarla kimliğini doğrulama hakkında daha fazla bilgi edinin. |
Yalnızca içerik sahibi
service cloud.firestore { match /databases/{database}/documents { // Allow only authenticated content owners access match /some_collection/{document} { // Allow reads and deletion if the current user owns the existing document allow read, delete: if request.auth.uid == resource.data.author_uid; // Allow creation if the current user owns the new document allow create: if request.auth.uid == request.resource.data.author_uid; // Allow updates by the owner, and prevent change of ownership allow update: if request.auth.uid == request.resource.data.author_uid && request.auth.uid == resource.data.author_uid; } } }
Karma herkese açık ve gizli erişim
service cloud.firestore { match /databases/{database}/documents { // Allow public read access, but only content owners can write match /some_collection/{document} { // Allow public reads allow read: if true // Allow creation if the current user owns the new document allow create: if request.auth.uid == request.resource.data.author_uid; // Allow updates by the owner, and prevent change of ownership allow update: if request.auth.uid == request.resource.data.author_uid && request.auth.uid == resource.data.author_uid; // Allow deletion if the current user owns the existing document allow delete: if request.auth.uid == resource.data.author_uid; } } }
Kimliği doğrulanmış tüm kullanıcılar için erişim
Bazen Cloud Firestore Security Rules, kullanıcının giriş yapıp yapmadığını kontrol eder ancak erişimi bu kimlik doğrulamaya göre daha fazla kısıtlamaz. Kurallarınızdan biri auth != null içeriyorsa giriş yapmış tüm kullanıcıların verilere erişmesini istediğinizi onaylayın.
| Önerilmez: Giriş yapmış tüm kullanıcılar, veritabanınızın tamamına okuma ve yazma erişimine sahiptir. |
service cloud.firestore { match /databases/{database}/documents { match /some_collection/{document} { allow read, write: if request.auth != null; } } }
|
Çözüm: Güvenlik koşullarını kullanarak erişimi daraltın.
Kimlik doğrulama kontrolü yaparken 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. Güvenlik koşulları ekleme ve role dayalı erişim hakkında daha fazla bilgi edinin. |
Rol tabanlı erişim
service cloud.firestore { match /databases/{database}/documents { // Assign roles to all users and refine access based on user roles match /some_collection/{document} { allow read: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader" allow write: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer" // Note: Checking for roles in your database using `get` (as in the code // above) or `exists` carry standard charges for read operations. } } }
Özelliğe dayalı erişim
// Give each user in your database a particular attribute // and set it to true/false // Then, use that attribute to grant access to subsets of data // For example, an "admin" attribute set // to "true" grants write access to data service cloud.firestore { match /databases/{database}/documents { match /collection/{document} { allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true; allow read: true; } } }
Karma herkese açık ve gizli erişim
service cloud.firestore {
match /databases/{database}/documents {
// Allow public read access, but only content owners can write
match /some_collection/{document} {
allow read: if true
allow write: if request.auth.uid == request.resource.data.author_uid
}
}
}
Doğrulanmamış e-posta adresleri için erişim
Bazen Cloud Firestore Security Rules, bir kullanıcının e-posta adresinin belirli bir alana ait olup olmadığını kontrol eder. Bu genellikle iyi bir uygulama olsa da, kullanıcı bir doğrulama e-postası aldıktan sonra ek bir adım gerçekleştirene kadar e-postalar oturum açma sırasında her zaman doğrulanmaz. E-posta adresinin gerçekten kullanıcıya ait olduğunu doğruladığınızdan emin olun.
| Önerilmez: Herhangi bir kullanıcı, rastgele bir e-posta adresiyle oturum açabilir. |
service cloud.firestore { match /databases/{database}/documents { // Allow access based on email domain match /some_collection/{document} { allow read: if request.auth != null && request.auth.email.endsWith('@example.com') } } }
| Çözüm: Erişimi yalnızca doğrulanmış e-postalarla sınırlandırın. |
E-postaları doğrulama
service cloud.firestore { match /databases/{database}/documents { // Allow access based on email domain match /some_collection/{document} { allow read: if request.auth != null && request.auth.email_verified && request.auth.email.endsWith('@example.com') } } }
Kapalı erişim
Uygulamanızı geliştirirken verilerinizi kilitli tutmak da yaygın bir yaklaşımdır. Bu durum genellikle tüm kullanıcıların okuma ve yazma erişimini aşağıdaki gibi kapattığınız anlamına gelir:
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
Firebase Admin SDK'ları ve Cloud Functions, veritabanınıza erişmeye devam edebilir. Cloud Firestore ürününü Firebase Admin SDK ile birlikte yalnızca sunucu tarafı arka uç olarak kullanmak istediğinizde bu kurallardan yararlanın. Güvenli olsa da uygulamanızın istemcilerinin verileri düzgün bir şekilde alabildiğini test etmeniz gerekir.
Cloud Firestore Security Rules ve işleyiş şekli hakkında daha fazla bilgi edinmek için Cloud Firestore Security Rules kullanmaya başlama başlıklı makaleyi inceleyin.
Cloud Firestore Security Rules bildirimlerinizi kontrol edin
Uygulamanızın davranışını kontrol etmek ve Cloud Firestore Security Rules yapılandırmalarınızı doğrulamak için Cloud Firestore emülatörünü kullanın. Herhangi bir değişiklik dağıtmadan önce birim testlerini yerel bir ortamda çalıştırmak ve otomatikleştirmek için Cloud Firestore emülatörünü kullanın.
Firebase konsolunda güncellenmiş Cloud Firestore Security Rules öğenizi hızlıca test etmek için Kurallar Alanı aracını kullanın.

- Kurallar Deneme Alanı'nı açmak için Kurallar sekmesinde Kurallar Deneme Alanı'nı tıklayın.
- Kural oyun alanı ayarlarında, testiniz için aşağıdakiler dahil olmak üzere seçenekleri belirleyin:
- Okuma veya yazma işlemlerini test etme
- Veritabanınızda yol olarak belirli bir konum
- Kimlik doğrulama türü: Kimliği doğrulanmamış, kimliği doğrulanmış anonim kullanıcı veya belirli bir kullanıcı kimliği
- Kurallarınızın özellikle referans verdiği belgeye özgü veriler (örneğin, kurallarınız yazma işlemine izin vermeden önce belirli bir alanın bulunmasını gerektiriyorsa)
- Çalıştır'ı tıklayın ve kurallar penceresinin üstündeki banner'da sonuçları inceleyin.