Keamanan Firebase Firestore: Panduan Security Rules untuk Production

Keamanan Firebase Firestore: Panduan Security Rules untuk Production

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

  1. Default Deny: Selalu kunci semua akses secara default.
  2. Autentikasi Terverifikasi: Pastikan pengguna telah login (request.auth != null).
  3. Validasi Pemilik Dokumen: Pengguna hanya boleh mengubah data miliknya sendiri.
  4. 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.

Command Palette

Search for a command to run...