Catch up on everthing we announced at this year's Firebase Summit. Learn more

Firebase Gerçek Zamanlı Veritabanı Kurallarını Anlayı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.
.yazı 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 süreç doğrulama denir. Sen kullanabilirsiniz Firebase Authentication uygulamanıza oturum açması için. 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 herkes yolunu okumanızı sağlar güvenlik kurallar kümesi var /foo/ fakat buna yazmak için hiç kimse:

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

.read ve .write bu kural takımı hibe yolu herhangi bir veri okuma erişimi çok kuralları, kaskad /foo/ yanı sıra herhangi bir derin yolu gibi /foo/bar/baz . O Not .read ve .write öylesine okunan access veritabanı geçersiz kılma kurallar sığ derin kurallar /foo/bar/baz hala bu örnekte verilip verilmeyeceği yolu bir kural bile /foo/bar/baz FALSE ile sonuçlandığında.

Gerçek Zamanlı Veri Tabanı Güvenlik Kuralları içerir Yerleşik değişkenler ve diğer yolları, sunucu tarafı damgaları, kimlik doğrulama bilgileri ve daha başvurmak için izin fonksiyonları. İşte hibe için doğrulanmış kullanıcılar için yazma erişimi olduğunu Kural bir örnek /users/<uid>/ <uid> Firebase Kimlik Doğrulaması yoluyla elde edilen kullanıcı 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. Kurallar dili içerir .validate için kullanılan aynı ifadeleri kullanarak doğrulama mantığını uygulamak sağlar kuralı .read ve .write kurallara. Tek fark yazma izin verilmesi için ilgili tüm doğrulama kuralları sırayla true değerlendirmek gerekir böylece doğrulama kuralları, basamaklandırılmamalıdır kalmamasıdır.

Bu kural yazılan bu verileri uygulamak /foo/ 100 karakterden az bir dize olması gerekir:

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

Doğrulama kuralları tüm erişebilir aynı yerleşik gibi işlevler ve değişkenler .read ve .write kurallara. 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.

Endeksler kullanılarak belirtilir .indexOn kuralı. İş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