Firebase Gerçek Zamanlı Veritabanı Güvenlik 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 var 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 izin veriyorsa tamamlanacaktır. Varsayılan olarak, kurallarınız kimsenin veritabanınıza 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ıma karşı 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
.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 verilmediğini ve ne zaman izin verildiğini açıklar.
.doğrula Doğru biçimlendirilmiş bir değerin nasıl görüneceğini, alt niteliklere sahip olup olmadığını ve veri türünü tanımlar.
.indexOn Sıralamayı ve sorgulamayı desteklemek için dizine eklenecek bir alt öğe 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 kimliğini doğrulamayı, 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 uygulamalardan daha fazla istemci tarafı kodu çalıştırır. Bu nedenle, güvenliğe yaklaşım şeklimiz sizin alışık 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ı 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 Authentication, 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 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ı 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 yolunu bulmanız gerekir. Gerçek Zamanlı Veritabanı Güvenlik Kuralları, her kullanıcı için erişimi kontrol etmenize olanak tanır. Örneğin, herkesin /foo/ yolunu okumasına, ancak kimsenin ona yazmasına izin vermeyen bir dizi güvenlik kuralı:

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

.read ve .write kuralları art arda gelir, dolayısıyla bu kural seti /foo/ yolundaki tüm verilere ve /foo/bar/baz gibi daha derin yollara okuma erişimi sağlar. Veritabanında daha sığ olan .read ve .write kurallarının daha derin 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 okuma erişimi yine de verilir.

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 izin veren yerleşik değişkenler ve işlevler içerir. Kimliği doğrulanmış kullanıcılara /users/<uid>/ için yazma erişimi veren bir kural örneğini burada bulabilirsiniz; burada <uid>, Firebase Kimlik Doğrulaması yoluyla 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, siz geliştirirken 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 izin veren bir .validate kuralı içerir. Tek fark, doğrulama kurallarının art arda sıralanmamasıdır , dolayısıyla yazmaya izin verilmesi için ilgili tüm doğrulama kurallarının doğru olarak değerlendirilmesi gerekir.

Bu kural, /foo/ dizinine yazılan verilerin 100 karakterden kısa 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şlevlere ve değişkenlere erişebilir. Bunları, veritabanınızdaki herhangi 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ı ad hoc sorgulamayı destekler, bu nedenle geliştirme sırasında genellikle dizinlere gerek yoktur. Yine de uygulamanızı başlatmadan önce, uygulamanız büyüdükçe çalışmaya devam etmelerini sağlamak için sahip olduğunuz tüm sorgular için dizinler belirtmeniz önemlidir.

Dizinler, .indexOn kuralı kullanılarak belirtilir. Dinozorların bir listesi için yükseklik ve uzunluk alanlarını dizine ekleyecek örnek bir dizin bildirimini burada bulabilirsiniz:

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

Sonraki adımlar