Güvenli olmayan kuralları düzeltin

Cloud Firestore 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üvenceye almak ve değişikliklerinizi dağıtmadan önce test etmek için bu kılavuzu kullanın.

Cloud Firestore veritabanınızın güvenliğinin düzgün şekilde sağlanmadığına dair bir uyarı alırsanız Cloud Firestore Güvenlik 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 Güvenlik Kurallarınızı anlayın

Cloud Firestore Güvenlik Kuralları, verilerinizi kötü niyetli kullanıcılardan korur. Firebase konsolunda oluşturulan herhangi bir Cloud Firestore örneğinin 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 ve geliştirme ortamındaki tüm kullanıcılara genel erişim 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 öykünücüsünü kullanın.

Güvenli olmayan kurallara sahip yaygın senaryolar

Varsayılan olarak veya Cloud Firestore ile uygulamanızı geliştirmeye çalışırken ayarlamış olabileceğiniz Cloud Firestore Güvenlik Kuralları, uygulamanızı dağıtmadan önce gözden geçirilmeli 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

Cloud Firestore'u kurarken kurallarınızı geliştirme sırasında açık erişime izin verecek şekilde belirlemiş olabilirsiniz. Uygulamanızı kullanan tek kişinin siz olduğunuzu düşünebilirsiniz, ancak uygulamayı siz dağıttıysanız internette mevcuttur. Kullanıcıların kimliğini doğrulamıyorsanız 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ğ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.

Yalnızca içerik sahibi

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow only authenticated content owners access
    match /some_collection/{document} {
      allow read, write: if request.auth != null && request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

Karışık genel 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 != null && request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

Kimliği doğrulanmış herhangi bir kullanıcı için erişim

Bazen Cloud Firestore Güvenlik Kuralları bir kullanıcının oturum açıp açmadığını kontrol eder ancak bu kimlik doğrulamasına 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.

Tavsiye edilmez: Oturum açmış herhangi bir kullanıcının veritabanınızın tamamına okuma ve yazma erişimi vardır.
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 amacıyla kimlik doğrulama özelliklerinden birini de kullanmak isteyebilirsiniz. Güvenlik koşulları ve rol tabanlı erişim ekleme 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.
    }
  }
}

Öznitelik tabanlı 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;
    }
  }
}
  

Karışık genel 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
    }
  }
}
  

Kapalı erişim

Uygulamanızı geliştirirken diğer 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:

// 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 Yönetici SDK'ları ve Bulut İşlevleri hâlâ veritabanınıza erişebilir. Cloud Firestore'u Firebase Admin SDK ile birlikte yalnızca sunucuya yönelik bir arka uç olarak kullanmayı düşünüyorsanız 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ına Başlarken bölümünden öğrenin.

Cloud Firestore Güvenlik Kurallarınızı kontrol edin

Uygulamanızın davranışını kontrol etmek ve Cloud Firestore Güvenlik Kuralları yapılandırmalarınızı doğrulamak için Cloud Firestore öykünücüsünü kullanın. Herhangi bir değişikliği dağıtmadan önce yerel ortamda birim testlerini çalıştırmak ve otomatikleştirmek için Cloud Firestore öykünücüsünü kullanın.

Güncellenmiş Cloud Firestore Güvenlik Kurallarınızı Firebase konsolunda hızlı bir şekilde test etmek için Kural Oyun Alanı aracını kullanın.

  1. Kurallar Oyun Alanını açmak için Kurallar sekmesinden Kurallar oyun alanı'nı tıklayın.
  2. Kurallar oyun alanı ayarlarında testiniz için aşağıdakiler dahil seçenekleri belirleyin:
    • Okuma veya yazma işlemlerini test etme
    • Yol olarak veritabanınızdaki 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 özel olarak referans verdiği belgeye özgü veriler (örneğin, kurallarınız, yazmaya izin verilmeden önce belirli bir alanın varlığını gerektiriyorsa)
  3. Çalıştır'a tıklayın ve kurallar penceresinin üzerindeki başlıkta sonuçları arayın.