Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Mobile Development

Firebase Security Rules

by
Length:ShortLanguages:

Indonesian (Bahasa Indonesia) translation by Ari Gustiawan (you can also view the original English article)

Firebase Realtime Database security rules adalah bagaimana Anda mengamankan data Anda dari pengguna yang tidak sah dan melindungi struktur data Anda.

Dalam tutorial tips cepat ini, saya akan menjelaskan bagaimana mengkonfigurasi aturan keamanan database Anda dengan benar sehingga hanya otorisasi pengguna telah membaca atau menulis akses ke data. Saya juga akan menunjukkan Anda bagaimana struktur data Anda untuk membuatnya mudah untuk mengamankan.

Masalah

Mari kita asumsikan kita memiliki JSON data dalam database Firebase kami, seperti pada contoh di bawah ini:

Melihat database, Anda dapat melihat bahwa ada beberapa masalah dengan data kami:

  1. Dua pengguna (user1 dan user3) memiliki nomor telepon yang sama. Kami ingin ini menjadi unik.
  2. user3 memiliki number untuk nama terakhir, alih-alih string.
  3. user2 memiliki hanya tujuh digit nomor teleponnya, bukan 11.
  4. Nilai umur untuk user1 dan user2 adalah string, sementara itu dari user3 adalah number.

Dengan semua kekurangan ini disorot dalam data kami, kita telah kehilangan integritas data. Pada langkah berikutnya, saya akan menunjukkan kepada Anda bagaimana untuk mencegah ini terjadi.

Permissive Rules

Firebase realtime database memiliki jenis aturan berikut:

Jenis Fungsi
.read Menjelaskan jika dan ketika data diperbolehkan untuk dibaca oleh pengguna.
.Write Menggambarkan jika dan ketika data diperbolehkan untuk ditulis.
.validate Mendefinisikan nilai diformat dengan benar apa yang akan terlihat seperti, apakah itu memiliki anak atribut, dan tipe data.
.indexOn Menentukan child indeks untuk mendukung ordering dan query.

Baca lebih lanjut tentang mereka di dokumentasi Firebase.

Di sini adalah aturan sangat permisif untuk key users dalam database kami.

Ini buruk, karena itu memberi orang kemampuan untuk membaca atau menulis data ke database. Siapa pun dapat mengakses path /users/ serta path yang lebih dalam. Tidak hanya itu, tetapi struktur tidak dikenakan pada users data.

Access Control Rules

Dengan aturan-aturan ini, kami mengontrol akses ke catatan pengguna untuk pengguna yang logged-in. Tidak hanya itu, tapi pengguna hanya dapat membaca atau menulis data mereka sendiri. Kita melakukan ini dengan wildcard: $uid. Ini adalah sebuah variabel yang mewakili child key (nama variabel mulai dengan $). Sebagai contoh, mengakses /users/user1 path, $uid adalah "user1".

Selanjutnya, kita membuat variabel auth, yang mewakili pengguna saat ini dikonfirmasi. Ini adalah variabel standar server yang disediakan oleh Firebase. Di baris 5 dan 6, kita sedang menegakkan kendala aksesibilitas bahwa hanya pengguna yang dikonfirmasi dengan id yang sama sebagai user record dapat membaca atau menulis data. Dengan kata lain, untuk setiap user, read dan write akses diberikan kepada /users/<uid>/, yang mana <uid>mewakili ID pengguna saat ini dikonfirmasi.

Variabel-variabel server Firebase lainnya adalah:

now Waktu saat ini dalam milidetik sejak zaman Linux.
root RuleDataSnapshot yang mewakili path root dalam Firebase database seperti yang ada sebelum operasi percobaan.
newData RuleDataSnapshot yang mewakili data seperti akan ada setelah operasi percobaan. Ini mencakup data baru yang sedang ditulis dan data yang ada.
data RuleDataSnapshot yang mewakili data ada sebelum operasi dilakukan
auth Mewakili user token payload

Baca lebih lanjut tentang ini dan variabel server lain di dokumentasi Firebase.

Enforcing Data Structure

Kami juga dapat menggunakan Firebase rules untuk enfore constraint pada data dalam database kami.

Sebagai contoh, dalam mengikuti aturan, baris 8 dan 11, kami memastikan aturan bahwa nilai baru untuk nama pertama dan nama terakhir harus string. Di baris 14, kami memastikan bahwa usia adalah number. Akhirnya, di baris 17 dan 18, kita sedang nyatakan bahwa nilai nomor telepon harus string dan panjang 11.

Tapi bagaimana kita mencegah nomor telepon duplikat?

Preventing Duplicates

Berikutnya, saya akan menunjukkan Anda bagaimana untuk mencegah nomor telepon duplikat.

Langkah 1: Normalize the Data Structure

Hal pertama yang perlu kita lakukan adalah untuk memodifikasi path root untuk menyertakan sebuah top-level /phoneNumbers/ node. Jadi, saat membuat user baru, kami juga akan menambah nomor telepon user node ini ketika validasi sukses. Struktur data baru kami akan terlihat seperti berikut:

Langkah 2: Enforce New Data Structure

Kita perlu mengubah security rules untuk menegakkan struktur data:

Di sini, kami membuat yakin nomor telepon unik dengan memeriksa jika sudah anak node /phoneNumbers/ dengan nomor telepon yang diberikan sebagai kunci. Dengan kata lain, kita sedang memeriksa bahwa nomor telepon tidak telah didaftarkan oleh user yang sudah ada. Jika itu belum, maka validasi sukses dan operasi tulis akan diterima — jika tidak akan ditolak.

Aplikasi Anda akan perlu untuk menambahkan nomor telepon ke daftar nomor telepon saat membuat user baru, dan ini akan perlu untuk menghapus nomor telepon pengguna jika pengguna tersebut akan dihapus.

Simulasi validasi dan Security Rules

Anda dapat mensimulasikan aturan keamanan di konsol Firebase dengan mengklik tombol Simulator. Tambahkan security rules Anda, pilih jenis simulasi (read atau write), beberapa data dengan path input, dan klik tombol Run:

Firebase Simulator

Jika nilai dari nama pertama adalah number alih-alih string, validasi akan gagal dan akses menulis ditolak:

Write Access Denied

Kesimpulan

Dalam tutorial tips cepat ini, Anda belajar tentang aturan-aturan keamanan Firebase Database: bagaimana untuk mencegah akses tidak sah ke data dan bagaimana untuk memastikan bahwa data dalam database yang terstruktur.

Untuk mempelajari lebih lanjut tentang Firebase Database security rules, lihat dokumentasi resmi. Dan memeriksa beberapa tutorial Firebase dan kursus di sini pada Envato Tuts + lain kami!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.