Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Hindari aturan yang tidak aman

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Gunakan panduan ini untuk memahami kerentanan umum dalam konfigurasi Aturan Keamanan Firebase, meninjau dan mengamankan aturan Anda sendiri dengan lebih baik, serta menguji perubahan Anda sebelum menerapkannya.

Jika Anda menerima peringatan bahwa data Anda tidak diamankan dengan benar, tinjau kesalahan yang sering terjadi ini dan perbarui aturan yang rentan.

Akses Aturan Keamanan Firebase Anda

Untuk melihat Aturan yang ada, gunakan Firebase CLI atau Firebase console. Pastikan Anda mengedit aturan menggunakan metode yang sama, secara konsisten, untuk menghindari kesalahan menimpa pembaruan. Jika Anda tidak yakin apakah aturan yang ditetapkan secara lokal mencerminkan pembaruan terbaru, Firebase console selalu menampilkan versi Aturan Keamanan Firebase yang paling baru diterapkan.

Untuk mengakses aturan Anda dari Firebase console , pilih proyek Anda, lalu navigasikan ke Realtime Database , Cloud Firestore atau Storage . Klik Aturan setelah Anda berada di database atau keranjang penyimpanan yang benar.

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

Pahami Aturan Keamanan Firebase

Aturan Keamanan Firebase melindungi data Anda dari pengguna jahat. Saat Anda membuat instance database atau bucket Cloud Storage 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 menerapkan aplikasi Anda.

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

Skenario umum dengan aturan tidak aman

Aturan yang mungkin telah Anda siapkan secara default atau saat Anda pertama kali mengerjakan pengembangan aplikasi harus ditinjau dan diperbarui sebelum Anda menerapkan aplikasi. Pastikan Anda mengamankan data pengguna dengan benar dengan menghindari perangkap umum berikut.

Akses terbuka

Saat 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 itu tersedia di internet. Jika Anda tidak mengautentikasi pengguna dan mengonfigurasi aturan keamanan, maka siapa pun yang menebak ID proyek Anda dapat mencuri, mengubah, 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;
    }
  }
}

Basis Data Waktu Nyata

{
  // 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
  }
}
    

Penyimpanan awan

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
// Warning: This rule makes every file in your Cloud 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 masuk akal untuk hierarki data Anda. Salah satu solusi umum untuk ketidakamanan ini adalah keamanan berbasis pengguna dengan Firebase Authentication. Pelajari lebih lanjut tentang mengautentikasi pengguna dengan aturan .

Cloud Firestore

Basis Data Waktu Nyata

Penyimpanan awan

Akses untuk setiap pengguna yang diautentikasi

Terkadang, Aturan memeriksa apakah pengguna telah masuk, tetapi tidak membatasi akses lebih lanjut berdasarkan autentikasi tersebut. Jika salah satu aturan Anda menyertakan auth != null , konfirmasikan bahwa Anda ingin setiap pengguna yang masuk memiliki akses ke data.

Tidak disarankan: Setiap pengguna yang masuk telah membaca dan menulis akses ke seluruh basis data Anda.

Cloud Firestore

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

Basis Data Waktu Nyata

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

Penyimpanan awan

// 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: Akses sempit menggunakan kondisi keamanan.

Saat Anda memeriksa autentikasi, Anda mungkin juga ingin menggunakan salah satu properti autentikasi untuk lebih membatasi akses ke pengguna tertentu untuk kumpulan data tertentu. Pelajari lebih lanjut tentang properti autentikasi yang berbeda .

Cloud Firestore

Basis Data Waktu Nyata

Penyimpanan awan

(Realtime Database) Aturan yang diwariskan secara tidak benar

Kaskade Aturan Database Realtime, dengan aturan di jalur induk yang lebih dangkal, mengesampingkan aturan di node anak yang lebih dalam. Saat Anda menulis aturan di simpul anak, ingatlah bahwa itu hanya dapat memberikan hak istimewa tambahan. Anda tidak dapat menyaring atau mencabut akses ke data di jalur yang lebih dalam di database Anda.

Tidak disarankan: Memperbaiki aturan di jalur anak
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Solusi: Tulis aturan di jalur induk yang luas, dan berikan hak istimewa yang lebih spesifik di jalur turunan Jika kebutuhan akses data Anda memerlukan lebih banyak perincian, buat aturan Anda tetap terperinci. Pelajari lebih lanjut tentang cascading Aturan Realtime Database di Mengamankan Data Anda .

Akses tertutup

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

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;
    }
  }
}

Basis Data Waktu Nyata

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

Penyimpanan awan

// Access to files through Cloud Storage is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage 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 ini jika Anda ingin menggunakan Cloud Firestore atau Realtime Database 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 tentang Aturan Keamanan Cloud Firestore dan cara kerjanya di Memulai Aturan Keamanan Cloud Firestore .

Uji Aturan Keamanan Cloud Firestore Anda

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 apa pun.

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