Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Daftar periksa keamanan Firebase

Untuk menjaga sumber daya Firebase dan data pengguna Anda tetap aman, ikuti panduan ini. Tidak setiap item harus sesuai dengan kebutuhan Anda, tetapi ingatlah hal itu saat Anda mengembangkan aplikasi.

Hindari lalu lintas yang kasar

Siapkan pemantauan dan peringatan untuk layanan backend

Untuk mendeteksi lalu lintas yang menyalahgunakan, seperti serangan denial-of-service (DOS), siapkan pemantauan dan peringatan untuk Cloud Firestore , Realtime Database , Cloud Storage , dan Hosting

Jika Anda mencurigai adanya serangan pada aplikasi Anda, hubungi Dukungan sesegera mungkin untuk memberi tahu mereka apa yang terjadi.

Aktifkan Pemeriksaan Aplikasi

Untuk membantu memastikan hanya aplikasi Anda yang dapat mengakses layanan backend Anda, aktifkan App Check untuk setiap layanan yang mendukungnya.

Konfigurasikan Fungsi Cloud Anda untuk menskalakan lalu lintas normal

Cloud Functions secara otomatis menskalakan untuk memenuhi permintaan aplikasi Anda, tetapi jika terjadi serangan, ini bisa berarti tagihan yang besar. Untuk mencegah hal ini, Anda dapat membatasi jumlah instance fungsi secara bersamaan berdasarkan lalu lintas normal untuk aplikasi Anda.

Atur peringatan untuk diberi tahu ketika batas hampir tercapai

Jika layanan Anda memiliki lonjakan permintaan, seringkali kuota akan masuk, dan secara otomatis membatasi lalu lintas ke aplikasi Anda. Pastikan untuk memantau dasbor Penggunaan dan penagihan Anda , tetapi Anda juga dapat menyetel peringatan anggaran pada proyek Anda untuk diberi tahu saat penggunaan sumber daya melebihi harapan.

Cegah self-DOS: uji fungsi secara lokal dengan emulator

Anda dapat dengan mudah melakukan DOS secara tidak sengaja saat mengembangkan Cloud Functions: misalnya, dengan membuat loop trigger-write yang tak terbatas. Anda dapat mencegah kesalahan ini memengaruhi layanan langsung dengan melakukan pengembangan dengan rangkaian emulator Firebase .

(Dan jika Anda tidak sengaja melakukan DOS sendiri, firebase deploy --only functions fungsi Anda dengan menghapusnya dari index.js lalu jalankan firebase deploy --only functions .)

Di mana respons real-time kurang penting, struktur berfungsi secara defensif

Jika Anda tidak perlu mempresentasikan hasil suatu fungsi secara real time, Anda dapat mengurangi lalu lintas yang menyalahgunakan dengan memproses hasil dalam kumpulan: mempublikasikan hasil ke topik Pub/Sub , dan memproses hasilnya secara berkala dengan fungsi terjadwal .

Pahami kunci API

Kunci API untuk layanan Firebase bukan rahasia

Firebase menggunakan kunci API hanya untuk mengidentifikasi proyek Firebase aplikasi Anda ke layanan Firebase, dan bukan untuk mengontrol akses ke database atau data Cloud Storage, yang dilakukan menggunakan Aturan Keamanan Firebase . Karena alasan ini, Anda tidak perlu memperlakukan kunci API untuk layanan Firebase sebagai rahasia, dan Anda dapat menyematkannya dengan aman dalam kode klien. Pelajari lebih lanjut tentang kunci API untuk Firebase .

Siapkan pelingkupan kunci API

Sebagai pencegah tambahan terhadap penyerang yang mencoba menggunakan kunci API Anda untuk memalsukan permintaan, Anda dapat membuat kunci API yang dicakupkan ke klien aplikasi Anda .

Jaga kerahasiaan kunci server FCM

Tidak seperti kunci API untuk layanan Firebase, kunci server FCM (digunakan oleh API HTTP FCM lama ) bersifat sensitif dan harus dirahasiakan.

Jaga kerahasiaan kunci akun layanan

Juga tidak seperti kunci API untuk layanan Firebase, kunci pribadi akun layanan (digunakan oleh Admin SDK ) bersifat sensitif dan harus dirahasiakan.

Aturan keamanan

Inisialisasi aturan dalam mode produksi atau terkunci

Saat Anda menyiapkan Cloud Firestore, Realtime Database, dan Cloud Storage, inisialisasi aturan keamanan Anda untuk menolak semua akses secara default, dan tambahkan aturan yang memberikan akses ke sumber daya tertentu saat Anda mengembangkan aplikasi.

Ini salah satu pengaturan default untuk instance baru Cloud Firestore (mode produksi) dan Realtime Database (mode terkunci). Pilih opsi ini saat menyiapkan instans database baru.

Untuk Cloud Storage, mulailah dengan konfigurasi aturan keamanan seperti berikut:

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

Aturan keamanan adalah skema; tambahkan aturan saat Anda menambahkan dokumen

Jangan menulis aturan keamanan setelah Anda menulis aplikasi, sebagai semacam tugas pra-peluncuran. Sebagai gantinya, tulis aturan keamanan saat Anda menulis aplikasi, memperlakukannya seperti skema database: kapan pun Anda perlu menggunakan jenis dokumen atau struktur jalur baru, tulis aturan keamanannya terlebih dahulu.

Aturan keamanan pengujian unit dengan Emulator Suite; tambahkan ke CI

Untuk memastikan aturan keamanan Anda mengikuti perkembangan aplikasi Anda, uji unit aturan Anda dengan Firebase emulator suite dan tambahkan pengujian ini ke pipeline CI Anda. Lihat panduan ini untuk Cloud Firestore dan Realtime Database .

Autentikasi

Otentikasi khusus: buat JWT dari lingkungan tepercaya (sisi server)

Jika Anda sudah memiliki sistem masuk yang aman, baik sistem kustom atau layanan pihak ketiga, Anda dapat menggunakan sistem yang ada untuk mengautentikasi dengan layanan Firebase. Buat JWT khusus dari lingkungan tepercaya, lalu berikan token ke klien Anda, yang menggunakan token untuk mengautentikasi ( iOS , Android , Web , Unity , C++ ).

Untuk contoh penggunaan autentikasi khusus dengan penyedia pihak ketiga, lihat entri blog, Otentikasi dengan Firebase menggunakan Okta .

Otentikasi terkelola: Penyedia OAuth 2.0 adalah yang paling aman

Jika Anda menggunakan fitur autentikasi terkelola Firebase, opsi penyedia OAuth 2.0 / OpenID Connect (Google, Facebook, dll.) adalah yang paling aman. Anda harus mendukung satu atau lebih penyedia ini jika Anda bisa (tergantung pada basis pengguna Anda).

Otentikasi kata sandi email: tetapkan kuota ketat untuk titik akhir masuk untuk mencegah serangan brute force

Jika Anda menggunakan layanan autentikasi email-sandi terkelola Firebase, kencangkan kuota default titik akhir identitytoolkit.googleapis.com untuk mencegah serangan brute force. Anda dapat melakukannya darihalaman API di Google Cloud Console .

Upgrade ke Cloud Identity Platform untuk autentikasi multi-faktor

Untuk keamanan ekstra saat login, Anda dapat menambahkan dukungan autentikasi multifaktor dengan mengupgrade ke Cloud Identity Platform . Kode Firebase Authentication Anda yang ada akan terus berfungsi setelah Anda meningkatkan versi.

Otentikasi anonim

Hanya gunakan autentikasi anonim untuk orientasi hangat

Hanya gunakan autentikasi anonim untuk menyimpan status dasar bagi pengguna sebelum mereka benar-benar masuk. Autentikasi anonim bukanlah pengganti untuk masuk pengguna.

Konversikan pengguna ke metode masuk lain jika mereka menginginkan data saat kehilangan ponsel

Data autentikasi anonim tidak akan bertahan jika pengguna mengosongkan penyimpanan lokal atau mengganti perangkat. Jika Anda perlu mempertahankan data setelah aplikasi dimulai ulang pada satu perangkat, konversikan pengguna menjadi akun permanen .

Gunakan aturan keamanan yang mengharuskan pengguna untuk mengonversi ke penyedia masuk atau telah memverifikasi email mereka

Siapa pun dapat membuat akun anonim di proyek Anda. Dengan mengingat hal itu, lindungi semua data non-publik dengan aturan keamanan yang memerlukan metode masuk khusus atau alamat email terverifikasi .

Sebagai contoh:

allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;

Manajemen lingkungan

Siapkan proyek pengembangan dan pementasan

Siapkan project Firebase terpisah untuk pengembangan, pementasan, dan produksi. Jangan gabungkan kode klien ke produksi sampai kode tersebut diuji terhadap proyek pementasan.

Batasi akses tim ke data produksi

Jika Anda bekerja dengan tim yang lebih besar, Anda dapat mengurangi konsekuensi kesalahan dan pelanggaran dengan membatasi akses ke data produksi menggunakan peran yang telah ditentukan sebelumnya atau peran IAM khusus.

Jika tim Anda menggunakan rangkaian emulator untuk pengembangan, Anda mungkin tidak perlu memberikan akses yang lebih luas ke proyek produksi.

manajemen perpustakaan

Hati-hati dengan kesalahan ejaan perpustakaan atau pengelola baru

Saat menambahkan pustaka ke proyek Anda, perhatikan baik-baik nama pustaka dan pengelolanya. Pustaka dengan nama yang mirip dengan yang ingin Anda instal dapat berisi kode berbahaya.

Jangan perbarui perpustakaan tanpa memahami perubahannya

Lihat log perubahan perpustakaan apa pun yang Anda gunakan sebelum memutakhirkan. Pastikan pemutakhiran menambah nilai, dan periksa apakah pengelola masih merupakan pihak yang Anda percayai.

Instal perpustakaan pengawas sebagai dev atau uji dependensi

Gunakan perpustakaan seperti Snyk untuk memindai proyek Anda untuk dependensi yang tidak aman.

Mengatur pemantauan untuk Fungsi; periksa setelah pembaruan perpustakaan

Jika Anda menggunakan Cloud Functions logger SDK , Anda dapat memantau dan diberi tahu tentang perilaku yang tidak biasa, termasuk perilaku yang disebabkan oleh update library.

Keamanan Fungsi Cloud

Jangan pernah memasukkan informasi sensitif ke dalam variabel lingkungan Cloud Function

Seringkali dalam aplikasi Node.js yang dihosting sendiri, Anda menggunakan variabel lingkungan untuk memuat informasi sensitif seperti kunci pribadi. Jangan lakukan ini di Cloud Functions . Karena Cloud Functions menggunakan kembali lingkungan di antara pemanggilan fungsi, informasi sensitif tidak boleh disimpan di lingkungan.

  • Untuk menyimpan kunci Firebase API, yang tidak rahasia , cukup sematkan dalam kode.
  • Jika Anda menggunakan Firebase Admin SDK di Cloud Function, Anda tidak perlu memberikan kredensial akun layanan secara eksplisit, karena SDK dapat memperolehnya secara otomatis selama inisialisasi.
  • Jika Anda memanggil Google dan Google Cloud API yang memerlukan kredensial akun layanan, library Google Auth untuk Node.js bisa mendapatkan kredensial ini dari kredensial default aplikasi , yang secara otomatis diisi di Cloud Functions.
  • Agar kunci pribadi dan kredensial untuk layanan non-Google tersedia untuk Cloud Functions Anda, gunakan Cloud Secret Manager .

Enkripsi informasi sensitif

Jika Anda tidak dapat menghindari penyampaian informasi sensitif ke Cloud Function, Anda harus menemukan solusi kustom Anda sendiri untuk mengenkripsi informasi.

Fungsi sederhana lebih aman; jika Anda membutuhkan kerumitan, pertimbangkan Cloud Run

Cobalah untuk menjaga Cloud Functions Anda sesederhana dan sedapat mungkin dipahami. Kompleksitas dalam fungsi Anda sering kali dapat menyebabkan bug yang sulit dikenali atau perilaku yang tidak terduga.

Jika Anda memang membutuhkan logika yang kompleks atau konfigurasi lingkungan, pertimbangkan untuk menggunakan Cloud Run daripada Cloud Functions.