Firebase Realtime Database Güvenlik Kurallarını Anlama

Firebase Realtime Database Güvenlik Kuralları, verilerinizin nasıl yapılandırıldığı ve hangi dizinlerin bulunduğu gibi. Bu kurallar geçerli . Her okunan ve yazma isteği yalnızca kurallarınız izin veriyorsa tamamlanır. Varsayılan olarak kurallarınız kimsenin veritabanınıza erişmesine izin vermiyor. Burada amaç, verilerinizi kurallarınızı özelleştirmek veya ayarlamak için zamanınız olana kadar kötüye kullanım durumundan kimlik doğrulama.

Realtime Database Güvenlik Kuralları, JavaScript benzeri bir söz dizimine sahiptir ve dört türe sahiptir:

Kural Türleri
okuyun Verilerin kullanıcılar tarafından okunmasına izin verilip verilmeyeceğini ve ne zaman izin verileceğini tanımlar.
.yazma Verilerin yazılmasına izin verilip verilmediğini ve ne zaman yazılabileceğini tanımlar.
.verify Doğru biçimlendirilmiş bir değerin veri türünü de içerir.
.indexOn Sıralama ve sorgulamayı desteklemek için dizine eklenecek alt öğeyi belirtir.

Realtime Database güvenliğine genel bakış

Firebase Realtime Database, API'leri yönetmek için olarak da bilinir. Bu araçlar, kullanıcılarınızın kimliklerini doğrulamanızı, ve girişleri doğrular.

Firebase destekli uygulamalar, diğer uygulamalara kıyasla daha fazla istemci tarafı kod çalıştırır kullanır. Bu nedenle, güvenlik yaklaşımımız biraz daha alıştığınızdan farklı olacaktır.

Doğrulama

Uygulamanızın güvenliğini sağlamak için attığımız en yaygın ilk adım ve kullanıcılarınızın tanımlanmasına katkıda bulunur. Bu sürece kimlik doğrulama adı verilir. Firebase Authentication'ı kullanabilirsiniz kullanıcıların uygulamanızda oturum açmasını sağlayın. Firebase Kimlik Doğrulaması Google ve Google Cloud Platform gibi yaygın kimlik doğrulama yöntemleri için Facebook, e-posta ve şifreyle giriş, anonim giriş ve daha fazlası.

Kullanıcı kimliği önemli bir güvenlik kavramıdır. Farklı kullanıcılar farklı bazen farklı yetenekleri olabilir. Örneğin, bir sohbette her mesaj, onu oluşturan kullanıcıyla ilişkilendirilir. Kullanıcı Sayısı Ayrıca kendi mesajlarını da silebilirler, ancak başkaları tarafından gönderilen iletileri silmezler yardımcı olur.

Yetkilendirme

Kullanıcınızı tanımlamak, güvenliğin yalnızca bir parçasıdır. Kim olduklarını öğrendikten sonra, veritabanınızdaki verilere erişimini kontrol edecek bir yönteme ihtiyaç duyabilir. Gerçek Zamanlı Veritabanı Güvenlik Kuralları Böylece her kullanıcı için erişimi kontrol edebilirsiniz. Örneğin, aşağıda örnek olarak herkesin /foo/ yolunu okumasına izin veren ancak bunu yapmayan güvenlik kuralları bir şey yazmalısınız:

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

.read ve .write kuralları kademeli olarak gerçekleştiğinden bu kural grubu /foo/ yolundaki ve daha derindeki tüm verilere okuma erişimi verir yolları./foo/bar/baz .read ve Veritabanında daha sığ olan .write kurallar daha derin kuralları geçersiz kılar. Bu nedenle, Bu örnekte de /foo/bar/baz için okuma erişimi verilir /foo/bar/baz yolundaki bir kural yanlış olarak değerlendirilmiş olsa bile.

Realtime Database Güvenlik Kuralları şunları içerir: yerleşik değişkenler 'nı inceleyin. ve fonksiyonların başında sunucu tarafı zaman damgalarını, kimlik doğrulama bilgilerini ve diğer ve diğerleri. Şu etkinlik için yazma erişimi veren bir kural örneğini aşağıda bulabilirsiniz: kimliği doğrulanmış kullanıcılardan /users/<uid>/ öğesine, burada <uid> : Firebase Authentication aracılığıyla edinilen kullanıcının kimliği.

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Veri doğrulama

Firebase Realtime Database şemasızdır. Bu sayede, öğeleri değiştirmek kolaylaşır Ancak uygulamanız dağıtıma hazır olduğunda tutarlı veriler yer alır. Kural dili bir .validate içerir kullanılan aynı ifadeleri kullanarak doğrulama mantığı uygulamanıza olanak tanıyan bir kuraldır. .read ve .write kuralları için. Tek fark doğrulama kurallarının kademeli olmadığından Yazmaya izin verilebilmesi için doğrulama kurallarının "true" olarak değerlendirilmesi gerekir.

Bu kurallar, /foo/ işlevine yazılan verilerin dize olması gerektiğini zorunlu kılar 100 karakterden az:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

Doğrulama kuralları, aynı yerleşik işlevlerin hepsine ve değişkenlerini .read ve .write kuralları olarak tanımlar. Tekliflerinizi otomatikleştirmek ve optimize etmek için bu adımları izleyerek, uygulamanızın başka bir yerinde bulunan verilerden haberdar olan doğrulama kuralları oluşturabilirsiniz. kullanıcı kimliği, sunucu zamanı ve çok daha fazlasını içerir.

Veritabanı dizinlerini tanımlama

Firebase Realtime Database, verilerin sıralanmasına ve sorgulanmasına olanak tanır. Küçük veriler için için veri tabanı geçici sorgulamayı desteklediğinden dizinler genellikle ne kadarının gerektiğini belirler. Ancak uygulamanızın lansmanını yapmadan önce, olarak çalışmaya devam etmesini sağlamak için, ihtiyacınız olan sorgulara ilişkin dizinleri yardımcı olabilir.

Dizinler .indexOn kuralı kullanılarak belirtilir. Bir örnekle açıklayalım bir liste için yükseklik ve uzunluk alanlarını dizine ekleyecek dinozorlar:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

Sonraki adımlar