Firebase Gerçek Zamanlı Veritabanı Güvenlik Kurallarını Anlayın

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Firebase Gerçek Zamanlı Veritabanı Güvenlik Kuralları, veritabanınıza kimlerin okuma ve yazma erişimi olduğunu, verilerinizin nasıl yapılandırıldığını ve hangi dizinlerin bulunduğ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 izin veriyorsa tamamlanacaktır. Varsayılan olarak kurallarınız kimsenin veritabanınıza erişmesine izin vermez. Bu, kurallarınızı özelleştirmeye veya kimlik doğrulamayı ayarlamaya zamanınız olana kadar veritabanınızı kötüye kullanımdan korumak içindir.

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

Kural Türleri
.okuman 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 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 ö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 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 zorlamayı ve girdileri doğrulamayı kolaylaştırır.

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

kimlik doğrulama

Uygulamanızın güvenliğini sağlamanın yaygın bir ilk adımı, kullanıcılarınızı belirlemektir. 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 Authentication, Google ve Facebook gibi yaygın kimlik doğrulama yöntemlerinin yanı sıra e-posta ve parola ile oturum açma, anonim oturum açma ve daha fazlası için açılan desteği içerir.

Kullanıcı kimliği önemli bir güvenlik kavramıdır. Farklı kullanıcıların farklı verileri vardır ve bazen farklı yetenekleri vardır. Ö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ı silemez.

yetki

Kullanıcınızı belirlemek, 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 var. Gerçek Zamanlı Veritabanı Güvenlik Kuralları, her kullanıcı için erişimi kontrol etmenize olanak tanır. Örneğin, burada herkesin /foo/ yolunu okumasına, ancak kimsenin yazmamasına izin veren bir dizi güvenlik kuralı verilmiştir:

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

.read ve .write kuralları basamaklıdır, bu nedenle bu kural kümesi /foo/ yolundaki herhangi bir veriye ve ayrıca /foo/bar/baz gibi daha derin yollara okuma erişimi verir. Veritabanında daha sığ olan .read ve .write kurallarının daha derin kuralları geçersiz kıldığına dikkat edin, bu nedenle /foo/bar /foo/bar/baz baz yolundaki bir kural false olarak değerlendirilse bile bu örnekte /foo/bar/baz öğesine okuma erişimi verilecektir.

Gerçek Zamanlı Veritabanı Güvenlik 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ılar için /users/<uid>/ 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ştirirken bazı şeyleri değiştirmenizi kolaylaştırır, ancak uygulamanız dağıtılmaya 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 izin veren bir .validate kuralı içerir. Tek fark, doğrulama kurallarının kademeli olmaması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/ öğesine yazılan verilerin 100 karakterden az 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şlev ve değişkenlerin tümüne erişime sahiptir. Bunları, veritabanınızdaki başka bir yerdeki 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, bu nedenle geliştirme sırasında dizinler genellikle gerekli değildir. Yine de uygulamanızı başlatmadan önce, uygulamanız büyüdükçe çalışmaya devam etmelerini sağlamak için yapmanız gereken tüm sorgular için dizinler belirlemek önemlidir.

Dizinler, .indexOn kuralı kullanılarak belirtilir. İşte bir dinozor listesi için yükseklik ve uzunluk alanlarını indeksleyecek örnek bir indeks beyanı:

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

Sonraki adımlar