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. Bu, kurallarınızı özelleştirmek veya kimlik doğrulamayı ayarlamak için zamanınız olana kadar veritabanınızı kötüye kullanıma karşı korumak içindir.

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

Kural Türleri
.read Verilerin kullanıcılar tarafından okunmasına izin verilip verilmeyeceğini ve ne zaman izin verileceğini tanımlar.
.write Verilerin yazılmasına izin verilip verilmediğini ve ne zaman izin verildiğini açıklar.
.validate Doğru biçimlendirilmiş bir değerin nasıl görüneceğini, alt özelliği olup olmadığını ve veri türünü tanımlar.
.indexOn Sıralama ve sorgulamayı desteklemek için dizine eklenecek bir alt öğeyi belirtir.

Realtime Database güvenliğine genel bakış

Firebase Realtime Database, uygulamanızın güvenliğini yönetmek için eksiksiz bir araç seti sağlar. Bu araçlar, kullanıcılarınızın kimliğini doğrulamayı, kullanıcı izinlerini uygulamayı ve girişleri doğrulamayı kolaylaştırır.

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

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ılar kendi mesajlarını da silebilir ancak diğer kullanıcılar tarafından gönderilen mesajları silemez.

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ı basamaklıdır. Bu nedenle, bu kural kümesi /foo/ yolundaki tüm verilerin yanı sıra /foo/bar/baz gibi daha derin yollardaki verilere okuma erişimi verir. Veritabanında daha üst düzeydeki .read ve .write kurallarının daha alt düzeydeki kuralları geçersiz kıldığını unutmayın. Bu nedenle, /foo/bar/baz yolundaki bir kural yanlış olarak değerlendirilse bile bu örnekte /foo/bar/baz için okuma erişimi yine de verilir.

Realtime Database Güvenlik Kuralları şunları içerir: yerleşik değişkenler 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ı kimliği.

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

Veri doğrulama

Firebase Realtime Database şemasızdır. Bu, geliştirme sırasında değişiklikler yapmanızı kolaylaştırır ancak uygulamanız dağıtılmaya hazır olduğunda verilerin tutarlı kalması önemlidir. 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/ alanına yazılan verilerin 100 karakterden kısa bir dize olması gerektiğini zorunlu kılar:

{
  "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