Firebase Realtime Database Güvenlik Kuralları, verilerinizin nasıl yapılandırıldığı ve hangi dizinlerin bulunduğu gibi. Bu kurallar geçerli . Her okuma ve yazma isteği yalnızca kurallarınız izin veriyorsa tamamlanır. Varsayılan olarak kurallarınız kimsenin veritabanınıza erişmesine izin vermiyor. Burada amaç, verilerinizi kurallarınızı özelleştirmek veya ayarlamak için zamanınız olana kadar kötüye kullanım durumundan kimlik doğrulama.
Realtime Database Güvenlik Kuralları, JavaScript benzeri bir söz dizimine sahiptir ve dört türe sahiptir:
Kural Türleri | |
---|---|
.read | Verilerin kullanıcılar tarafından okunmasına izin verilip verilmediğini ve ne zaman izin verildiğini açıklar. |
.yazma | Verilerin yazılmasına izin verilip verilmediğini ve ne zaman yazılabileceğini tanımlar. |
.validate | Doğru biçimlendirilmiş bir değerin nasıl görüneceğini, alt özelliği olup olmadığını ve veri türünü tanımlar. |
.indexOn | Sıralama ve sorgulamayı desteklemek için dizine eklenecek bir alt öğeyi belirtir. |
Realtime Database güvenliğine genel bakış
Firebase Realtime Database, olarak da bilinir. Bu araçlar, kullanıcılarınızın kimliklerini doğrulamanızı, ve girişleri doğrular.
Firebase destekli uygulamalar, diğer birçok teknoloji grubuna sahip uygulamalara kıyasla daha fazla istemci tarafı kod çalıştırır. Bu nedenle, güvenlik konusundaki yaklaşımımız alıştığınızdan biraz farklı olabilir.
Doğrulama
Uygulamanızın güvenliğini sağlamanın ilk adımı genellikle kullanıcılarınızı tanımlamaktır. Bu sürece kimlik doğrulama denir. Kullanıcıların uygulamanızda oturum açmasını sağlamak için Firebase Authentication'i kullanabilirsiniz. Firebase Authentication, Google ve Facebook gibi yaygın kimlik doğrulama yöntemlerinin yanı sıra e-posta ve şifre girişi, anonim giriş ve daha fazlası için hazır destek içerir.
Kullanıcı kimliği önemli bir güvenlik kavramıdır. Farklı kullanıcılar farklı bazen farklı yetenekleri olabilir. Örneğin, bir sohbette 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.
Yetkilendirme
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 yoluna ihtiyacınız vardır. Realtime Database güvenlik kuralları, her kullanıcının erişimini kontrol etmenize olanak tanır. Örneğin, /foo/
yolunu herkesin okumasına ancak kimsenin bu yola yazmamasına izin veren bir güvenlik kuralları grubu aşağıda verilmiştir:
{ "rules": { "foo": { ".read": true, ".write": false } } }
.read
ve .write
kuralları kademeli olarak gerçekleştiğinden bu kural grubu
/foo/
yolundaki ve daha derindeki tüm verilere okuma erişimi verir
/foo/bar/baz
gibi yolları ifade eder. Veritabanında daha üst düzeydeki .read
ve .write
kurallarının daha alt düzeydeki 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
için okuma erişimi yine de verilir.
Gerçek Zamanlı Veritabanı Güvenlik Kuralları, diğer yolları, sunucu tarafı zaman damgalarını, kimlik doğrulama bilgilerini ve daha fazlasını referans olarak kullanmanıza olanak tanıyan yerleşik değişkenler
ve işlevler içerir. Şu etkinlik için yazma erişimi veren bir kural örneğini aşağıda bulabilirsiniz:
kimliği doğrulanmış kullanıcılardan /users/<uid>/
öğesine, burada <uid> :
Firebase Authentication aracılığıyla edinilen kullanıcı kimliği.
{ "rules": { "users": { "$uid": { ".write": "$uid === auth.uid" } } } }
Veri doğrulama
Firebase Realtime Database şemasızdır. Bu sayede, öğeleri değiştirmek kolaylaşır
Ancak uygulamanız dağıtıma hazır olduğunda
tutarlı veriler yer alır. Kural dili bir .validate
içerir
kullanılan aynı ifadeleri kullanarak doğrulama mantığı uygulamanıza olanak tanıyan bir kuraldır.
.read
ve .write
kuralları için. Tek fark
doğrulama kurallarının kademeli
olmadığından
Yazmaya izin verilebilmesi için doğrulama kurallarının "true" olarak değerlendirilmesi gerekir.
Bu kurallar, /foo/
işlevine yazılan verilerin dize olması gerektiğini zorunlu kılar
100 karakterden az:
{ "rules": { "foo": { ".validate": "newData.isString() && newData.val().length < 100" } } }
Doğrulama kuralları, aynı yerleşik işlevlerin hepsine ve
değişkenlerini .read
ve .write
kuralları olarak tanımlar. Tekliflerinizi otomatikleştirmek ve optimize etmek için
bu adımları izleyerek, uygulamanızın başka bir yerinde bulunan verilerden haberdar olan
doğrulama kuralları oluşturabilirsiniz.
kullanıcı kimliği, sunucu zamanı ve çok daha fazlasını içerir.
Veritabanı dizinlerini tanımlama
Firebase Realtime Database, verilerin sıralanmasına ve sorgulanmasına olanak tanır. Küçük veriler için için veri tabanı geçici sorgulamayı desteklediğinden dizinler genellikle ne kadarının gerektiğini belirler. Ancak uygulamanızı kullanıma sunmadan önce, uygulamanız büyüdükçe çalışmaya devam etmeleri için sorgularınız için dizinleri belirtmeniz önemlidir.
Dizinler .indexOn
kuralı kullanılarak belirtilir. Aşağıda, dinozor listesinin yükseklik ve uzunluk alanlarını dizine ekleyebilecek bir dizin beyanı örneği verilmiştir:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Sonraki adımlar
- Veritabanınız için kural geliştirmeye 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.