Güvenli olmayan kuralları düzeltme

Cloud Firestore Security Rules Yapılandırmalardaki yaygın güvenlik açıklarını anlamak, kendi kurallarınızı inceleyip daha iyi hale getirmek ve değişikliklerinizi dağıtmadan önce test etmek için bu kılavuzdan yararlanın.

Yapay zeka desteği için aşağıdaki istemi yapay zeka kodlama aracınıza (Android Studio'daki Gemini, Antigravity, Claude Code, Codex ve Cursor gibi) kopyalayın. İstemi özelleştirebilir ve temsilcinizle birlikte yineleme yapabilirsiniz. Ayrıntılı yükleme 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 güvenli hale getirilmediğine dair bir uyarı alırsanız Cloud Firestore Security Rules öğenizi değiştirip test ederek güvenlik açıklarını giderebilirsiniz.

Mevcut güvenlik kurallarınızı görüntülemek için Firebase konsolunda Kurallar sekmesine gidin.

Cloud Firestore Security Rules

Cloud Firestore Security Rules verilerinizi kötü amaçlı kullanıcılardan koruyun. Firebase konsolunda oluşturulan tüm Cloud Firestore örnekleri için varsayılan kurallar, tüm kullanıcıların erişimini engeller. Uygulamanızı geliştirmek ve veritabanınıza erişmek için bu kuralları değiştirmeniz gerekir. Ayrıca, geliştirme ortamındaki 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ı düzgün şekilde yapılandırmak ve verilerinizi güvenceye almak 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ştirirken ilk başta 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'yı ayarlarken kurallarınızı geliştirme sırasında açık erişime izin verecek şekilde ayarlamış olabilirsiniz. Uygulamanızı kullanan tek kişinin siz olduğunuzu düşünebilirsiniz ancak uygulamanızı dağıttıysanız internette kullanılabilir. 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ılara 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şiniz için anlamlı kurallar oluşturun. Bu güvensizliğe karşı yaygın çözümlerden biri, Firebase Authentication ile kullanıcı tabanlı güvenliktir. Kullanıcıları kurallarla 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 özel 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 oturum açtığını kontrol eder ancak bu kimlik doğrulamaya göre erişimi daha fazla kısıtlamaz. Kurallarınızdan birinde auth != null varsa oturum açmış herhangi bir kullanıcının verilere erişmesini istediğinizi onaylayın.

Önerilmez: Oturum açmış 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ğrulamayı kontrol ederken belirli veri kümeleri için belirli kullanıcılara erişimi daha da kısıtlamak üzere kimlik doğrulama özelliklerinden birini de kullanabilirsiniz. Güvenlik koşulları ekleme ve role tabanlı 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 özel 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 kullanıcının e-postasının belirli bir alana ait olup olmadığını kontrol edin. 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-postanın 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 yaygın olarak kullanılan bir diğer yaklaşım da verilerinizi kilitli tutmaktır. Bu durum genellikle tüm kullanıcılara 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'yı Firebase Admin SDK ile birlikte yalnızca sunucu tarafında çalışan bir arka uç olarak kullanmayı planladığınızda bu kuralları kullanın. Güvenli olsa da uygulamanızın istemcilerinin verileri düzgün şekilde alıp alamadığını test etmeniz gerekir.

Cloud Firestore Security Rules ve bunların işleyiş şekli hakkında daha fazla bilgiyi Cloud Firestore Security Rules'ı kullanmaya başlama başlıklı makalede bulabilirsiniz.

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şikliği dağıtmadan önce yerel bir ortamda birim testlerini çalıştırmak ve otomatikleştirmek için Cloud Firestore emülatörünü kullanın.

Güncellenmiş Cloud Firestore Security Rules'nızı Firebase konsolunda hızlıca test etmek için kurallar deneme alanı aracını kullanın.

  1. Kurallar deneme alanını açmak için Kurallar sekmesinde Kurallar deneme alanı'nı tıklayın.
  2. Kurallar deneme alanı ayarlarında, testiniz için seçenekleri belirleyin. Örneğin:
    • Okuma veya yazma işlemlerini test etme
    • Veritabanınızdaki belirli bir konum (yol olarak)
    • 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 (ör. kurallarınız, yazma işlemine izin vermeden önce belirli bir alanın bulunmasını gerektiriyorsa)
  3. Çalıştır'ı tıklayın ve sonuçları kurallar penceresinin üstündeki banner'da bulun.