Hindari aturan yang tidak aman

Gunakan panduan ini untuk memahami kerentanan umum pada konfigurasi Aturan Keamanan Firebase, meninjau dan mengamankan aturan Anda sendiri dengan lebih baik, dan menguji perubahan yang Anda buat sebelum diterapkan.

Jika Anda menerima peringatan bahwa data Anda tidak diamankan dengan baik, tinjau kesalahan yang umum dibuat ini dan update aturan yang rentan.

Mengakses Aturan Keamanan Firebase

Untuk melihat Aturan yang sudah ada, gunakan Firebase CLI atau Firebase console. Pastikan Anda mengedit aturan menggunakan metode yang sama, secara konsisten, untuk menghindari tidak sengaja menimpa update. Jika Anda tidak yakin apakah aturan yang Anda tentukan secara lokal mencerminkan update terbaru, Firebase console selalu menunjukkan versi terbaru dari Aturan Keamanan Firebase Anda.

Untuk mengakses aturan Anda dari Firebase console, pilih project, kemudian arahkan ke Database atau Storage. Klik Aturan setelah Anda berada di database atau bucket penyimpanan yang benar.

Untuk mengakses aturan Anda dari Firebase CLI, buka file aturan yang tercantum pada file firebase.json Anda.

Memahami Aturan Keamanan Firebase

Aturan Keamanan Firebase melindungi data Anda dari pengguna yang bermaksud jahat. Saat Anda membuat instance database atau penyimpanan yang dibuat di Firebase console, Anda dapat memilih untuk menolak akses ke semua pengguna (mode Terkunci) atau memberikan akses ke semua pengguna (mode Uji). Meskipun Anda mungkin menginginkan konfigurasi yang lebih terbuka selama pengembangan, pastikan Anda meluangkan waktu untuk mengonfigurasi aturan dengan benar dan mengamankan data Anda sebelum menggunakan aplikasi.

Saat Anda mengembangkan aplikasi dan menguji berbagai konfigurasi untuk aturan Anda, gunakan salah satu emulator Firebase lokal untuk menjalankan aplikasi Anda di lingkungan pengembangan lokal.

Skenario umum dengan aturan yang tidak aman

Aturan yang mungkin telah Anda siapkan secara default, atau yang pertama kali Anda kerjakan saat mengembangkan aplikasi harus ditinjau dan diperbarui sebelum aplikasi Anda diterapkan. Pastikan Anda mengamankan data pengguna dengan benar, dengan menghindari masalah umum berikut.

Akses terbuka

Ketika menyiapkan proyek Firebase, Anda mungkin telah menetapkan aturan untuk mengizinkan akses terbuka selama pengembangan. Anda mungkin berpikir bahwa Anda adalah satu-satunya orang yang menggunakan aplikasi Anda, tetapi jika Anda telah menerapkannya, aplikasi tersebut akan tersedia di internet. Jika Anda tidak mengautentikasi pengguna dan mengonfigurasi aturan keamanan, maka siapa saja yang menebak project ID Anda dapat mencuri, memodifikasi, atau menghapus data.

Tidak disarankan: Akses baca dan tulis untuk semua pengguna.

Cloud Firestore


// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

Realtime Database


{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

  "rules": {
    ".read": true
    ".write": true
  }
}
    

Cloud Storage


// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with Google App Engine, this will also make
// files uploaded via GAE public.
// Warning: This rule makes every file in your storage bucket accessible to any
// user. Apply caution before using it in production, since it means anyone can
// overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
Solusi: Aturan yang membatasi akses baca dan tulis.

Buat aturan yang logis untuk hierarki data Anda. Salah satu solusi yang umum untuk ketidakamanan ini adalah keamanan berbasis pengguna dengan Firebase Authentication. Pelajari lebih lanjut cara mengautentikasi pengguna dengan aturan.

Cloud Firestore

Realtime Database

Cloud Storage

Akses untuk setiap pengguna yang diautentikasi

Terkadang, Aturan memverifikasi apakah pengguna sudah login, tetapi tidak membatasi akses lebih lanjut berdasarkan autentikasi tersebut. Jika salah satu aturan Anda berisi auth != null, pastikan bahwa Anda ingin semua pengguna yang login memiliki akses ke data.

Tidak direkomendasikan: Setiap pengguna yang login memiliki akses baca dan tulis ke seluruh database Anda.

Cloud Firestore


service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

Realtime Database


{
  "rules": {
    ".read": "auth.uid != null"
    ".write": "auth.uid != null"
  }
}

Cloud Storage


// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
Solusi: Persempit akses menggunakan kondisi keamanan.

Saat memeriksa autentikasi, Anda juga dapat menggunakan salah satu properti autentikasi untuk membatasi akses lebih lanjut bagi pengguna tertentu ke kumpulan data tertentu. Pelajari lebih lanjut berbagai properti autentikasi.

Cloud Firestore

Realtime Database

Cloud Storage

Akses tertutup

Saat Anda mengembangkan aplikasi, pendekatan umum lainnya adalah menjaga data Anda tetap terkunci. Biasanya, ini berarti Anda menutup akses baca dan tulis untuk semua pengguna, seperti berikut ini:

Cloud Firestore

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Realtime Database

{
  "rules": {
    ".read": false,
    ".write": false
  }
}
    

Cloud Storage

// Access to files through Firebase Storage is completely disallowed.
// Files may still be accessible through Google App Engine or GCS APIs.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

Firebase Admin SDK dan Cloud Functions masih dapat mengakses database Anda. Gunakan aturan-aturan ini saat Anda ingin menggunakan Cloud Firestore sebagai backend khusus server bersama dengan Firebase Admin SDK. Meskipun aman, Anda harus menguji apakah klien aplikasi Anda dapat mengambil data dengan benar.

Pelajari lebih lanjut Aturan Keamanan Cloud Firestore dan cara kerjanya di bagian Memulai Aturan Keamanan Cloud Firestore.

Menguji Aturan Keamanan Cloud Firestore

Untuk memeriksa perilaku aplikasi Anda dan memverifikasi konfigurasi Aturan Keamanan Cloud Firestore Anda, gunakan Firebase Emulator. Gunakan emulator Cloud Firestore untuk menjalankan dan mengotomatiskan pengujian unit di lingkungan lokal sebelum Anda menerapkan perubahan.

Untuk memvalidasi Aturan Keamanan Firebase dengan cepat di Firebase console, gunakan Simulator Aturan Firebase.