Firebase Realtime Database 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 bulunduğ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. Varsayılan olarak, kurallarınız veritabanınıza erişime izin vermez. Bu, kurallarınızı özelleştirmek veya kimlik doğrulama 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 benzeri bir söz dizimine sahiptir ve dört türde gelir:
Kural Türleri | |
---|---|
.read | Verilerin kullanıcılar tarafından okunmasına izin verilip verilmediğini ve izin veriliyorsa ne zaman izin verildiğini açıklar. |
.write | Verilerin yazılmasına izin verilip verilmediğini ve izin veriliyorsa ne zaman izin verildiğini açıklar. |
.validate | Doğru biçimlendirilmiş bir değerin nasıl görüneceğini, alt özelliklere sahip olup olmadığını ve veri türünü tanımlar. |
.indexOn | Sıralama ve sorgulamayı desteklemek için dizine eklenecek bir alt öğe belirtir. |
Realtime Database Güvenliğe genel bakış
Firebase Realtime Database, uygulamanızın güvenliğini yönetmek için eksiksiz bir araç seti sunar. Bu araçlar, kullanıcılarınızın kimliğini doğrulamanızı, kullanıcı izinlerini zorunlu kılmanızı ve girişleri doğrulamanızı kolaylaştırır.
Firebase destekli uygulamalar, diğer birçok teknoloji yığınına sahip uygulamalara kıyasla daha fazla istemci tarafı kodu çalıştırır. Bu nedenle, güvenliğe yaklaşımımız alışkın olduğunuzdan biraz farklı olabilir.
Doğrulama
Uygulamanızı güvenli hale getirme sürecinde genellikle ilk adım, 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'ı kullanabilirsiniz. Firebase Authentication; Google ve Facebook gibi yaygın kimlik doğrulama yöntemlerinin yanı sıra e-posta ve şifreyle giriş, anonim giriş gibi yöntemler 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 mesajı oluşturan kullanıcıyla ilişkilendirilir. Kullanıcılar kendi mesajlarını silebilir ancak diğer kullanıcıların yayınladığı mesajları silemez.
Yetkilendirme
Kullanıcınızı tanımlamak, güvenliğin yalnızca bir parçasıdır. Bu kişilerin kim olduğunu öğrendikten sonra, veritabanınızdaki verilere erişimlerini kontrol etmeniz gerekir. Realtime Database güvenlik kuralları, her kullanıcının erişimini kontrol etmenize olanak tanır. Örneğin, herkesin /foo/
yolunu okumasına izin veren ancak kimsenin bu yola yazmasına izin vermeyen bir güvenlik kuralları grubu aşağıda verilmiştir:
{ "rules": { "foo": { ".read": true, ".write": false } } }
.read
ve .write
kuralları basamaklı olarak uygulanır. Bu nedenle, bu kural grubu /foo/
yolundaki tüm verilere ve /foo/bar/baz
gibi daha derin yollardaki tüm verilere okuma erişimi verir. 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
için okuma erişimi verilmeye devam eder.
Realtime Database güvenlik 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>/
için yazma erişimi veren bir kural örneği verilmiştir. Burada <uid>, Firebase Authentication aracılığıyla elde edilen kullanıcı kimliğidir.
{ "rules": { "users": { "$uid": { ".write": "$uid === auth.uid" } } } }
Veri doğrulama
Firebase Realtime Database şemasızdır. Bu sayede, geliştirme sürecinde değişiklik yapmak kolaylaşır. Ancak uygulamanız dağıtıma hazır olduğunda verilerin tutarlı kalması önemlidir. Kurallar dilinde, .validate
kuralı bulunur. Bu kural, .read
ve .write
kuralları için kullanılan ifadeleri kullanarak doğrulama mantığı uygulamanıza olanak tanır. Tek fark, doğrulama kurallarının kademeli olarak uygulanmamasıdır. Bu nedenle, yazma işleminin yapılmasına izin verilmesi için ilgili tüm doğrulama kurallarının doğru olarak değerlendirilmesi gerekir.
Bu kurallar, /foo/
konumuna yazılan verilerin 100 karakterden kısa bir dize olmasını 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 başka yerlerdeki veriler, kullanıcınızın kimliği, sunucu saati ve daha pek çok şeyden haberdar olan doğrulama kuralları oluşturmak için kullanabilirsiniz.
Veritabanı dizinlerini tanımlama
Firebase Realtime Database, verilerin sıralanmasına ve sorgulanmasına olanak tanır. Veri boyutları küçük olduğunda veritabanı anlık sorgulamayı destekler. Bu nedenle, geliştirme sırasında genellikle dizin gerekmez. Ancak uygulamanızı kullanıma sunmadan önce, uygulamanız büyüdükçe sorgularınızın çalışmaya devam etmesini sağlamak için sorgularınızın dizinlerini belirtmeniz önemlidir.
Dizinler, .indexOn
kuralı kullanılarak belirtilir. Aşağıda, bir dinozor listesinin yükseklik ve uzunluk alanlarını dizine ekleyecek bir dizin bildirimi örneği verilmiştir:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Sonraki adımlar
- Veritabanınız için kural geliştirme planlamasına başlayın.
- Güvenlik kurallarını kullanarak verilerinizi güvenli hale getirme hakkında daha fazla bilgi edinin.
- Kuralları kullanarak dizin belirtme hakkında daha fazla bilgi edinin.