Firebase Rules ile Güvenlik (Firestore & Realtime Database)
Firebase kullanırken yapılan en kritik hata, veritabanını açık bırakmaktır. Uygulama ne kadar iyi olursa olsun, Rules (Güvenlik Kuralları) yoksa veri herkes için savunmasızdır.
Bu yazıda, Firebase Security Rules mantığını sade bir dille anlatıyor; özellikle Firestore ve Quiz / Login senaryoları üzerinden gerçek kurallarla örnekliyorum.
Firebase Rules Nedir?
Firebase Rules; kim, ne zaman, hangi veriye erişebilir? sorularını yanıtlayan güvenlik katmanıdır.
Rules sayesinde:
Yetkisiz erişim engellenir
Kullanıcıya özel veri korunur
Okuma / yazma kontrol altına alınır
⚠️ En Tehlikeli Ayar (Test Mode)
allow read, write: if true;
Bu kural:
Herkese tam yetki verir
Canlı uygulamalarda KESİNLİKLE kullanılmamalıdır
Test bittikten sonra mutlaka kapatılmalıdır.
1️⃣ Authentication Zorunluluğu
İlk ve temel kural:
allow read, write: if request.auth != null;
Bu sayede:
Giriş yapmayan kullanıcı veri okuyamaz
Bot ve anonim erişimler engellenir
2️⃣ Kullanıcıya Özel Veri Koruma
users koleksiyonu için kural:
match /users/{userId} {
allow read, write: if request.auth.uid == userId;
}
Bu kural sayesinde:
Her kullanıcı sadece kendi verisini görür
Başkasının verisine erişemez
3️⃣ Quiz Uygulaması İçin Örnek Rules
Quiz soruları herkese açık olabilir:
match /quizzes/{quizId} {
allow read: if true;
allow write: if false;
}
Sorular alt koleksiyonu:
match /quizzes/{quizId}/questions/{questionId} {
allow read: if true;
allow write: if false;
}
Kullanıcılar soruları okuyabilir ama değiştiremez.
4️⃣ Skor Kaydetme (Kullanıcı Bazlı)
match /scores/{userId} {
allow read, write: if request.auth.uid == userId;
}
Bu yapı:
Kullanıcı kendi skorunu kaydeder
Başkasının skorunu manipüle edemez
5️⃣ Sadece Admin Yazabilsin
allow write: if request.auth.token.admin == true;
Admin yetkisi:
Firebase Custom Claims ile verilir
Panelden manuel verilmez
Bu yöntemle:
Quiz soruları sadece admin ekler
Kullanıcı veri bütünlüğü korunur
6️⃣ Veri Doğrulama (Validation)
allow write: if request.resource.data.score is int
&& request.resource.data.score >= 0
&& request.resource.data.score <= 100;
Rules sadece erişimi değil, verinin şeklini de kontrol eder.
7️⃣ Realtime Database İçin Kısa Örnek
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Mantık aynı, sözdizimi farklıdır.
8️⃣ Sık Yapılan Hatalar
❌ Rules yazmadan yayına çıkmak
❌ Tüm koleksiyonu public yapmak
❌ Client tarafında güvenliğe güvenmek
❌ Validation kullanmamak
Güvenlik client tarafında değil, Firebase Rules tarafında sağlanır.
ZaTH Developer Güvenlik Tavsiyesi 🔐
Eğer bir kullanıcı istemediğin bir şeyi yapabiliyorsa, hata senin Rules’undadır.
Basit başla, sonra sıkılaştır:
Önce auth kontrolü
Sonra kullanıcı bazlı erişim
En son validation ve admin yetkileri
Sonuç
Firebase Rules:
Görünmez ama hayati bir katmandır
Doğru yazıldığında uygulamanı korur
Yanlış yazıldığında tüm sistemi riske atar
ZaTH Developer olarak; güvenli, sürdürülebilir ve profesyonel uygulamalar geliştirmeyi önemsiyorum. Bir sonraki yazıda Firebase Rules’u gerçek bir quiz projesi üzerinden daha da detaylandırabiliriz 🚀
Hiç yorum yok:
Yorum Gönder