Güvenli olmayan kuralları düzeltme

Cloud Firestore Güvenlik Kurallarındaki yaygın güvenlik açıklarını anlamak için bu kılavuzu kullanın kurallarınızı inceleyebilir ve daha iyi güvenlik altına alabilirsiniz, ve değişikliklerinizi dağıtmadan önce test edin.

Cloud Firestore veritabanınızın düzgün şekilde güvenliğinin sağlanmadığına dair bir uyarı alırsanız güvenlik açıklarını çözmek için Cloud Firestore Güvenlik Kuralları.

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

Cloud Firestore Güvenlik Kurallarınızı Anlama

Cloud Firestore Güvenlik Kuralları, verilerinizi kötü amaçlı kullanıcılardan korur. Varsayılan Firebase konsolunda oluşturulan herhangi bir Cloud Firestore örneği için kural reddi tüm kullanıcılara erişmelerini sağlayabilir. Uygulamanızı geliştirmek ve veritabanınıza erişmek için bu kuralları değiştirmeniz gerekir ve genel erişim vermeyi düşünebilirsiniz tüm kullanıcılara sunmak için kullanılır. Ancak uygulamanızı üretim ortamına dağıtmadan önce ve verilerinizin güvenliğini sağlayın.

Uygulamanızı geliştirirken ve kullanıyorsanız, uygulamanızı şurada çalıştırmak için: Cloud Firestore emülatörünü yerel geliştirme ortamı sağlar.

Güvenli olmayan kurallar içeren yaygın senaryolar

Varsayılan olarak veya başlangıçta ayarlamış olabileceğiniz Cloud Firestore Güvenlik Kuralları uygulamanızı Cloud Firestore ile geliştirmek için yaptığınız çalışmalar incelenmeli ve güncellenmelidir. inceleyin. Kullanıcılarınızın güvenliğini düzgün bir şekilde sağladığınızdan emin olun. veri kaçınılmasına yardımcı olur.

Açık erişim

Cloud Firestore'u kurarken kurallarınızı açık erişime izin verecek şekilde ayarlamış olabilirsiniz yardımcı olur. 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.

Önerilmez: Tümüne okuma ve yazma erişimi yardımcı olur.
// 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 veri işlemeyi kısıtlayan kurallar yazma erişimi.

Veri hiyerarşiniz için anlamlı olacak kurallar oluşturun. Yaygın olarak kullanılan çözümlerden biri Firebase Authentication ile kullanıcı tabanlı güvenlik uygulamaktır. Daha fazla bilgi edinin kurallarla kullanıcı kimliklerini doğrulama hakkında

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
    }
  }
}
  

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

Kimliği doğrulanmış tüm kullanıcılar için erişim

Cloud Firestore Güvenlik Kuralları, bazen bir kullanıcının giriş yapıp yapmadığını kontrol eder ancak buna devam etmez bu kimlik doğrulamasına göre erişimi kısıtlayabilir. Kurallarınızdan biri auth != null, giriş yapan tüm kullanıcıların dışı verilerdir.

Önerilmez: Giriş yapmış tüm kullanıcılar şunu okudu: ve veritabanınızın tamamına yazma erişimi sağlayın.
service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth != null;
    }
  }
}
Çözüm: Güvenliği kullanarak erişimi daraltın conditions.

Kimlik doğrulamasını kontrol ederken, aynı zamanda erişimi daha da kısıtlamak için kimlik doğrulama özelliklerini dönüşüm artışını kullanabilirsiniz. Daha fazla bilgi: ekleyerek güvenlik koşullarını karşılayıp rol tabanlı erişim.

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.
    }
  }
}

Özellik 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;
    }
  }
}
  

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
    }
  }
}
  

Kapalı erişim

Uygulamanızı geliştirirken yaygın olarak kullanılan bir diğer yaklaşım da ve verileri kilitlenebilir. 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:

// 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, Cloud Firestore'u yalnızca sunucu olarak kullanmak istiyorsanız bu kuralları kullanın 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 Güvenlik Kuralları ve bu kuralların şurada işleyiş şekli hakkında daha fazla bilgi edinin: Cloud Firestore Güvenlik Kurallarını Kullanmaya Başlama.

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 emülatörünü kullanın. Cloud Firestore'u kullanma dağıtmadan önce birim testlerini yerel ortamda çalıştırıp otomatikleştirmek için emülatör herhangi bir değişiklik yok.

Güncellenen Cloud Firestore Güvenlik Kurallarınızı Firebase konsolunda hızlıca test etmek için şunu kullanın: aracını inceleyelim.

  1. Kurallar Oyun Alanı'nı açmak için aşağıdaki menüden Kurallar oyun alanı'nı tıklayın. Kurallar sekmesi.
  2. Kurallar oyun alanı ayarlarında, testinizle ilgili seçenekleri belirleyin. Örneğin:
    • Okuma veya yazma işlemlerini test etme
    • Veritabanınızdaki belirli bir Konum'u (yol olarak)
    • Kimlik doğrulama türü: kimliği doğrulanmamış, kimliği doğrulanmış anonim kullanıcı veya bir belirli bir kullanıcı kimliği
    • Kurallarınızın özellikle referans verdiği, dokümana özgü veriler ( kurallarınız, doğrulama işleminden önce belirli bir alanın yazmaya izin verme)
  3. Çalıştır'ı tıklayın ve kurallar penceresinin üzerindeki banner'da sonuçları arayın.