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

Pahami Aturan Keamanan Firebase Realtime Database

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

Aturan Keamanan Firebase Realtime Database menentukan siapa yang telah membaca dan menulis akses ke database Anda, bagaimana struktur data Anda, dan indeks apa yang ada. Aturan ini hidup di server Firebase dan diterapkan secara otomatis setiap saat. Setiap permintaan baca dan tulis hanya akan diselesaikan jika aturan Anda mengizinkannya. Secara default, aturan Anda tidak mengizinkan siapa pun mengakses database Anda. Ini untuk melindungi database Anda dari penyalahgunaan hingga Anda memiliki waktu untuk menyesuaikan aturan atau menyiapkan autentikasi.

Aturan Keamanan Database Realtime memiliki sintaks seperti JavaScript dan tersedia dalam empat jenis:

Jenis Aturan
.Baca Menjelaskan jika dan kapan data diizinkan untuk dibaca oleh pengguna.
.menulis Menjelaskan jika dan kapan data diizinkan untuk ditulis.
.mengesahkan Menentukan seperti apa tampilan nilai yang diformat dengan benar, apakah memiliki atribut turunan, dan tipe data.
.indexOn Menentukan anak untuk diindeks untuk mendukung pemesanan dan kueri.

Ikhtisar keamanan Basis Data Waktu Nyata

Firebase Realtime Database menyediakan seperangkat alat lengkap untuk mengelola keamanan aplikasi Anda. Alat-alat ini memudahkan untuk mengautentikasi pengguna Anda, menegakkan izin pengguna, dan memvalidasi input.

Aplikasi yang diberdayakan Firebase menjalankan lebih banyak kode sisi klien daripada yang memiliki banyak tumpukan teknologi lainnya. Oleh karena itu, cara kami mendekati keamanan mungkin sedikit berbeda dari yang biasa Anda lakukan.

Autentikasi

Langkah pertama yang umum dalam mengamankan aplikasi Anda adalah mengidentifikasi pengguna Anda. Proses ini disebut otentikasi . Anda dapat menggunakan Firebase Authentication agar pengguna dapat masuk ke aplikasi Anda. Firebase Authentication menyertakan dukungan drop-in untuk metode autentikasi umum seperti Google dan Facebook, serta login email dan sandi, login anonim, dan banyak lagi.

Identitas pengguna adalah konsep keamanan yang penting. Pengguna yang berbeda memiliki data yang berbeda, dan terkadang mereka memiliki kemampuan yang berbeda. Misalnya, dalam aplikasi obrolan, setiap pesan dikaitkan dengan pengguna yang membuatnya. Pengguna juga dapat menghapus pesan mereka sendiri, tetapi tidak dapat menghapus pesan yang diposting oleh pengguna lain.

Otorisasi

Mengidentifikasi pengguna Anda hanyalah bagian dari keamanan. Setelah Anda mengetahui siapa mereka, Anda memerlukan cara untuk mengontrol akses mereka ke data di database Anda. Aturan Keamanan Realtime Database memungkinkan Anda mengontrol akses untuk setiap pengguna. Misalnya, berikut adalah seperangkat aturan keamanan yang memungkinkan siapa pun membaca jalur /foo/ , tetapi tidak ada yang menulisnya:

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

.write .read cascade, jadi aturan ini memberikan akses baca ke data apa pun di jalur /foo/ serta jalur yang lebih dalam seperti /foo/bar/baz . Perhatikan bahwa aturan .write .read lebih dangkal dalam database mengesampingkan aturan yang lebih dalam, jadi akses baca ke /foo/bar/baz akan tetap diberikan dalam contoh ini bahkan jika aturan di jalur /foo/bar/baz dievaluasi ke false.

Aturan Keamanan Realtime Database menyertakan variabel dan fungsi bawaan yang memungkinkan Anda merujuk ke jalur lain, stempel waktu sisi server, informasi autentikasi, dan banyak lagi. Berikut adalah contoh aturan yang memberikan akses tulis untuk pengguna yang diautentikasi ke /users/<uid>/ , dengan <uid> adalah ID pengguna yang diperoleh melalui Firebase Authentication.

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Validasi data

Firebase Realtime Database tidak memiliki skema. Ini memudahkan untuk mengubah berbagai hal saat Anda mengembangkan, tetapi setelah aplikasi Anda siap didistribusikan, penting bagi data untuk tetap konsisten. Bahasa aturan menyertakan aturan .validate yang memungkinkan Anda menerapkan logika validasi menggunakan ekspresi yang sama yang digunakan untuk aturan .write .read Satu-satunya perbedaan adalah bahwa aturan validasi tidak berjenjang , jadi semua aturan validasi yang relevan harus bernilai true agar penulisan diizinkan.

Aturan ini memberlakukan bahwa data yang ditulis ke /foo/ harus berupa string kurang dari 100 karakter:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

Aturan validasi memiliki akses ke semua fungsi dan variabel bawaan yang sama seperti aturan .write .read Anda dapat menggunakan ini untuk membuat aturan validasi yang mengetahui data di tempat lain di database Anda, identitas pengguna Anda, waktu server, dan banyak lagi.

Mendefinisikan indeks database

Firebase Realtime Database memungkinkan pemesanan dan kueri data. Untuk ukuran data kecil, database mendukung kueri ad hoc, sehingga indeks umumnya tidak diperlukan selama pengembangan. Sebelum meluncurkan aplikasi Anda, penting untuk menentukan indeks untuk setiap kueri yang Anda miliki untuk memastikan mereka terus berfungsi seiring pertumbuhan aplikasi Anda.

Indeks ditentukan menggunakan aturan .indexOn . Berikut adalah contoh deklarasi indeks yang akan mengindeks bidang tinggi dan panjang untuk daftar dinosaurus:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

Langkah selanjutnya