Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Firebase Gerçek Zamanlı Veritabanı Kurallarını Anlayın

Firebase Gerçek Zamanlı Veritabanı Güvenliği Kuralları, veritabanınıza kimlerin okuma ve yazma erişimi olduğunu, verilerinizin nasıl yapılandırıldığını ve hangi dizinlerin mevcut olduğunu belirler. Bu kurallar Firebase sunucularında yaşar ve her zaman otomatik olarak uygulanır. Her okuma ve yazma talebi yalnızca kurallarınız izin verirse tamamlanacaktır. Varsayılan olarak, kurallarınız veritabanınıza kimsenin erişmesine izin vermez. 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ımdan korumak içindir.

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

Kural Türleri
.read Verilerin kullanıcılar tarafından okunmasına izin verilip verilmediğini açıklar.
.yazmak Verilerin yazılmasına izin verilip verilmediğini ve ne zaman yazılacağını 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ıralama ve sorgulamayı desteklemek için endekslenecek bir alt öğe 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 zorunlu kılmayı 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 şeklimiz alışkın olduğunuzdan biraz farklı olabilir.

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 Kimlik Doğrulaması, Google ve Facebook gibi yaygın kimlik doğrulama yöntemlerinin yanı sıra e-posta ve parola girişi, anonim oturum açma ve daha fazlası için bırakma desteğini içerir.

Kullanıcı kimliği önemli bir güvenlik konseptidir. 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 kendi mesajlarını da silebilir, ancak diğer kullanıcılar tarafından gönderilen mesajları silemez.

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 yolunu bulmanız gerekir. Gerçek Zamanlı Veritabanı Güvenliği Kuralları, her kullanıcı için erişimi kontrol etmenize olanak sağlar. Örneğin, herkesin /foo/ yolunu okumasına, ancak kimsenin ona yazmasına izin vermeyen bir dizi güvenlik kuralı aşağıda verilmiştir:

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

.read ve .write kuralları art .write , bu nedenle bu kural seti, /foo/ yolundaki tüm verilere ve /foo/bar/baz gibi daha derin yollara okuma erişimi sağlar. O Not .read ve .write veritabanı geçersiz kılma kuralları sığ derin kurallar, bu nedenle okuma erişimi için /foo/bar/baz hala bu örnekte verilmiş olsa bile durum değişmez yolda bir kural /foo/bar/baz Değerlendirilen yanlış.

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. Aşağıda, kimliği doğrulanmış kullanıcılara /users/<uid>/ yazma erişimi veren bir kural örneği verilmiştir; 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 Realtime Database şemasızdır. Bu, geliştirirken bir şeyleri değiştirmeyi 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 ifadelerin aynısını kullanarak doğrulama mantığını uygulamanıza izin veren bir .validate kuralı içerir. Tek fark, doğrulama kurallarının art arda sıralanmaması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/ yazılan verilerin 100 karakterden az bir dize olması gerektiğini zorunlu /foo/ :

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

Doğrulama kuralları, .read ve .write kuralları ile aynı yerleşik işlevlerin ve değişkenlerin .read .write . Bunları, veritabanınızdaki başka yerlerdeki verilerden, kullanıcı kimliğinizden, sunucu zamanından ve çok daha fazlasından haberdar olan doğrulama kuralları oluşturmak için kullanabilirsiniz.

Veritabanı dizinlerini tanımlama

Firebase Realtime Database, verilerin sipariş edilmesine 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. Ancak uygulamanızı başlatmadan önce, uygulamanız büyüdükçe çalışmaya devam etmelerini sağlamak zorunda olduğunuz tüm sorgular için dizin belirtmeniz önemlidir.

Dizinler .indexOn kuralı kullanılarak belirtilir. Dinozorların bir listesi için yükseklik ve uzunluk alanlarını dizine ekleyen örnek bir dizin bildirimi:

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

Sonraki adımlar

  • Veritabanınız için kural geliştirmeyi planlamaya başlayın .
  • Güvenlik kurallarını kullanarak verilerinizin güvenliğini sağlama hakkında daha fazla bilgi edinin.
  • Kuralları kullanarak dizinleri belirtme hakkında daha fazla bilgi edinin.