Bahaya Firestore Rules Default
Saat membuat proyek Firebase baru, pengembang sering kali mengaktifkan "Test Mode" yang mengizinkan semua akses baca dan tulis publik (allow read, write: if true;). Mengabaikan aturan ini saat aplikasi masuk ke fase production dapat mengakibatkan kebocoran data sensitif atau manipulasi data oleh pihak tak bertanggung jawab.
Prinsip Utama Firestore Security Rules
- Default Deny: Selalu kunci semua akses secara default.
- Autentikasi Terverifikasi: Pastikan pengguna telah login (
request.auth != null). - Validasi Pemilik Dokumen: Pengguna hanya boleh mengubah data miliknya sendiri.
- Validasi Skema Input: Pastikan tipe data dan bidang wajib diperiksa saat operasi tulis.
Contoh Lengkap Aturan Keamanan Firestore
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Fungsi Pembantu (Helper Functions)
function isAuthenticated() {
return request.auth != null;
}
function isOwner(userId) {
return isAuthenticated() && request.auth.uid == userId;
}
function isAdmin() {
return isAuthenticated() && request.auth.token.admin == true;
}
// Aturan Koleksi Blog (Publik Boleh Membaca, Admin Boleh Menulis)
match /blog/{postId} {
allow read: if resource.data.published == true || isAdmin();
allow write: if isAdmin();
}
// Aturan Koleksi Pengguna (Setiap Pengguna Hanya Mengelola Profil Sendiri)
match /users/{userId} {
allow read: if isAuthenticated();
allow create, update: if isOwner(userId)
&& request.resource.data.email is string
&& request.resource.data.displayName.size() > 0;
allow delete: if isAdmin();
}
}
}
Kesimpulan
Firestore Security Rules adalah benteng utama pertahanan database Anda. Selalu gunakan Firebase Emulator Suite untuk menguji aturan keamanan secara otomatis sebelum melakukan deploy ke lingkungan produksi.