Firebase Gerçek Zamanlı Veritabanı Güvenlik Kuralları, veritabanınıza kimlerin okuma ve yazma erişimine sahip olduğunu, verilerinizin nasıl yapılandırıldığını ve hangi dizinlerin mevcut 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 tamamlanır. Kurallarınız varsayılan olarak 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.
Realtime Database güvenlik kuralları, JavaScript'e benzer bir söz dizimine sahiptir ve dört türdedir:
Kural Türleri | |
---|---|
.read | Verilerin kullanıcılar tarafından okunmasına izin verilip verilmediğini ve ne zaman izin verildiğini açıklar. |
.write | 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 ö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, 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 uygulamayı ve girişleri doğrulamayı kolaylaştırır.
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ın farklı verileri ve bazen farklı özellikleri vardır. Örneğin, bir sohbet uygulamasında her ileti, onu oluşturan kullanıcıyla ilişkilendirilir. Kullanıcılar kendi mesajlarını 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ı basamaklıdır. Bu nedenle, bu kural kümesi /foo/
yolundaki tüm verilerin yanı sıra /foo/bar/baz
gibi daha derin yollardaki verilere okuma erişimi verir. 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. Kimliği doğrulanmış kullanıcılara /users/<uid>/
için yazma erişimi veren bir kural örneği aşağıda 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ız. Bu, geliştirme sırasında değişiklikler yapmanızı kolaylaştırır ancak uygulamanız dağıtılmaya hazır olduğunda verilerin tutarlı kalması önemlidir. Kural dilinde, .read
ve .write
kuralları için kullanılan aynı ifadeleri kullanarak doğrulama mantığı uygulamanıza olanak tanıyan bir .validate
kuralı bulunur. Tek fark, doğrulama kurallarının basamaklandırılmamasıdır. Bu nedenle, yazma işlemine izin verilmesi için tüm ilgili doğrulama kurallarının doğru olarak değerlendirilmesi gerekir.
Aşağıdaki kurallar, /foo/
değişkenine yazılan verilerin 100 karakterden kısa bir dize 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ı kullanarak veritabanınızdaki diğer verileri, kullanıcınızın kimliğini, sunucu saatini ve daha fazlasını dikkate alan doğrulama kuralları oluşturabilirsiniz.
Veritabanı dizinlerini tanımlama
Firebase Realtime Database, verilerin sıralanmasına ve sorgulanmasına olanak tanır. Küçük veri boyutları için veritabanı anlık sorgulamayı destekler. Bu nedenle, geliştirme sırasında genellikle dizin gerekli değildir. 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 listesindeki 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ş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.