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"] } } }