Firebase Gerçek Zamanlı Veritabanı Güvenliği Kurallarını Anlayın

Firebase Gerçek Zamanlı Veritabanı Güvenliği Kuralları, veritabanınıza kimin okuma ve yazma erişimine sahip olduğunu, verilerinizin nasıl yapılandırıldığını ve hangi dizinlerin mevcut olduğunu belirler. Bu kurallar Firebase sunucularında bulunur ve her zaman otomatik olarak uygulanır. Her okuma ve yazma isteği yalnızca kurallarınız buna izin veriyorsa tamamlanacaktır. Varsayılan olarak kurallarınız kimsenin veritabanınıza erişmesine izin vermez. Bunun amacı, 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şı korumaktır.

Gerçek Zamanlı Veritabanı Güvenliği Kuralları, JavaScript benzeri bir sözdizimine sahiptir ve dört türde gelir:

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

Gerçek Zamanlı Veritabanı güvenliğine genel bakış

Firebase Gerçek Zamanlı Veritabanı, 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 kimlik doğrulamasını, kullanıcı izinlerini zorunlu kılmayı ve girişleri doğrulamayı kolaylaştırır.

Firebase destekli uygulamalar, diğer birçok teknoloji yığınına sahip uygulamalara kıyasla daha fazla istemci tarafı kodu çalıştırır. Bu nedenle güvenliğe yaklaşımımız alışık olduğunuzdan biraz farklı olabilir.

Kimlik doğrulama

Uygulamanızı güvence altına almanın ilk yaygın adımı kullanıcılarınızı tanımlamaktır. Bu işleme kimlik doğrulama denir. Kullanıcıların uygulamanızda oturum açmasını sağlamak için Firebase Authentication'ı kullanabilirsiniz. Firebase Kimlik Doğrulaması, Google ve Facebook gibi yaygın kimlik doğrulama yöntemlerinin yanı sıra e-posta ve şifreyle oturum açma, anonim oturum açma ve daha fazlası için anında desteği içerir.

Kullanıcı kimliği önemli bir güvenlik kavramıdır. Farklı kullanıcılar farklı verilere ve bazen de farklı yeteneklere sahiptir. Örneğin bir sohbet uygulamasında her mesaj, onu oluşturan kullanıcıyla ilişkilendirilir. Kullanıcılar ayrıca kendi mesajlarını silebilir ancak diğer kullanıcılar tarafından gönderilen mesajları silemezler.

yetki

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şimlerini kontrol etmenin bir yoluna ihtiyacınız vardır. Gerçek Zamanlı Veritabanı Güvenliği Kuralları, her kullanıcı için erişimi kontrol etmenize olanak tanır. Örneğin, herkesin /foo/ yolunu okumasına ama kimsenin bu yola yazmasına izin vermeyen bir dizi güvenlik kuralı aşağıda verilmiştir:

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

.read ve .write kuralları kademeli olduğundan, bu kural seti /foo/ yolundaki tüm verilere ve ayrıca /foo/bar/baz gibi daha derin yollara okuma erişimi verir. Veritabanında sığ olan .read ve .write kurallarının daha derindeki kuralları geçersiz kıldığını unutmayın; bu nedenle /foo/bar/baz yolundaki bir kural false olarak değerlendirilse bile bu örnekte /foo/bar/baz okuma erişimi yine de verilecektir.

Gerçek Zamanlı Veritabanı Güvenliği Kuralları, diğer yollara, sunucu tarafı zaman damgalarına, kimlik doğrulama bilgilerine ve daha fazlasına başvurmanıza olanak tanıyan yerleşik değişkenler ve işlevler içerir. Kimliği doğrulanmış kullanıcılara /users/<uid>/ dosyasına yazma erişimi veren bir kuralın örneğini burada bulabilirsiniz; burada <uid>, Firebase Authentication aracılığıyla elde edilen kullanıcının kimliğidir.

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

Veri doğrulama

Firebase Gerçek Zamanlı Veritabanı şemasızdır. Bu, geliştirdikçe bazı şeyleri değiştirmenizi kolaylaştırır, ancak uygulamanız dağıtıma hazır olduğunda verilerin tutarlı kalması önemlidir. Kural dili, .read ve .write kuralları için kullanılan aynı ifadeleri kullanarak doğrulama mantığını uygulamanıza olanak tanıyan bir .validate kuralı içerir. Tek fark, doğrulama kurallarının basamaklandırılmamasıdır ; bu nedenle, yazmaya izin verilebilmesi için ilgili tüm doğrulama kurallarının doğru olarak değerlendirilmesi gerekir.

Bu kural /foo/ dosyası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ı, .read ve .write kurallarıyla aynı yerleşik işlevlerin ve değişkenlerin tümüne erişebilir. Bunları, veritabanınızın başka bir yerindeki verilerden, kullanıcı kimliğinizden, sunucu saatinden ve çok daha fazlasından haberdar olan doğrulama kuralları oluşturmak için kullanabilirsiniz.

Veritabanı dizinlerini tanımlama

Firebase Gerçek Zamanlı Veritabanı, verilerin sıralanmasına ve sorgulanmasına olanak tanır. Küçük veri boyutları için veritabanı geçici sorgulamayı destekler, dolayısıyla geliştirme sırasında genellikle indekslere gerek kalmaz. Uygulamanızı başlatmadan önce, uygulamanız büyüdükçe çalışmaya devam etmelerini sağlamak için ihtiyaç duyduğunuz tüm sorgular için dizinleri belirtmeniz önemlidir.

Dizinler .indexOn kuralı kullanılarak belirtilir. Dinozorların bir listesi için yükseklik ve uzunluk alanlarını indeksleyecek örnek bir indeks bildirimi aşağıda verilmiştir:

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

Sonraki adımlar