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

Daftar periksa keamanan Firebase

Untuk menjaga keamanan resource Firebase dan data pengguna Anda, ikuti panduan ini. Tidak setiap item akan berlaku untuk kebutuhan Anda, tetapi ingatlah saat Anda mengembangkan aplikasi.

Hindari lalu lintas yang kasar

Siapkan pemantauan dan peringatan untuk layanan backend

Untuk mendeteksi traffic yang mengganggu, 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, aktifkan App Check untuk setiap layanan yang mendukungnya.

Konfigurasikan Cloud Functions Anda untuk menskalakan lalu lintas normal

Cloud Functions secara otomatis melakukan penskalaan 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 traffic normal untuk aplikasi Anda.

Siapkan peringatan untuk diberi tahu saat batas hampir tercapai

Jika layanan Anda mengalami lonjakan permintaan, sering kali kuota akan muncul, dan secara otomatis membatasi lalu lintas ke aplikasi Anda. Pastikan untuk memantau dasbor Penggunaan dan penagihan Anda, tetapi Anda juga dapat menyetel lansiran anggaran pada proyek Anda untuk diberi tahu saat penggunaan sumber daya melebihi ekspektasi.

Cegah dosis sendiri: uji fungsi secara lokal dengan emulator

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

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

Jika responsivitas waktu nyata kurang penting, struktur berfungsi secara defensif

Jika Anda tidak perlu menampilkan hasil fungsi secara real time, Anda dapat mengurangi lalu lintas yang melanggar dengan memproses hasil secara berkelompok: publikasikan hasil ke topik Pub/Sub , dan proses hasilnya secara berkala dengan fungsi terjadwal .

Pahami kunci API

Kunci API untuk layanan Firebase bukanlah rahasia

Firebase hanya menggunakan kunci API 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 di kode klien. Pelajari lebih lanjut kunci API untuk Firebase .

Siapkan cakupan kunci API

Sebagai pencegah tambahan terhadap penyerang yang mencoba menggunakan kunci API Anda untuk memalsukan permintaan, Anda dapat membuat kunci API yang dicakup untuk 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 mode terkunci

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

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

Untuk Cloud Storage, mulai 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 sebuah skema; tambahkan aturan saat Anda menambahkan dokumen

Jangan menulis aturan keamanan setelah Anda menulis aplikasi, sebagai semacam tugas pra-peluncuran. Alih-alih, tulis aturan keamanan saat Anda menulis aplikasi, perlakukan mereka seperti skema database: setiap kali 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 pengembangan aplikasi, uji unit aturan Anda dengan rangkaian emulator Firebase 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 khusus atau layanan pihak ketiga, Anda dapat menggunakan sistem yang ada untuk mengautentikasi dengan layanan Firebase. Buat JWT khusus dari lingkungan tepercaya, lalu teruskan token ke klien Anda, yang menggunakan token untuk mengautentikasi ( iOS+ , Android , Web , Unity , C++ ).

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

Autentikasi 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 dari penyedia ini jika Anda bisa (bergantung pada basis pengguna Anda).

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

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

Otentikasi kata sandi email: Mengaktifkan perlindungan pencacahan email

Jika Anda menggunakan layanan autentikasi kata sandi email terkelola dari Firebase, aktifkan perlindungan enumerasi email , yang mencegah pelaku jahat menyalahgunakan titik akhir autentikasi proyek Anda untuk menebak nama akun.

Upgrade ke Cloud Identity Platform untuk autentikasi multifaktor

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

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 proses 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 menyimpan data setelah memulai ulang aplikasi di satu perangkat, ubah pengguna menjadi akun permanen .

Gunakan aturan keamanan yang mengharuskan pengguna untuk beralih ke penyedia masuk atau 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

Menyiapkan proyek pengembangan dan pementasan

Siapkan proyek Firebase terpisah untuk pengembangan, pementasan, dan produksi. Jangan gabungkan kode klien ke produksi sampai 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 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 perpustakaan ke proyek Anda, perhatikan baik-baik nama perpustakaan dan pengelolanya. Pustaka dengan nama yang mirip dengan pustaka yang ingin Anda instal dapat berisi kode berbahaya.

Jangan perbarui pustaka tanpa memahami perubahannya

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

Instal pustaka pengawas sebagai dev atau uji dependensi

Gunakan pustaka seperti Snyk untuk memindai proyek Anda dari ketergantungan yang tidak aman.

Siapkan pemantauan untuk Fungsi; periksa setelah pembaruan perpustakaan

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

Keamanan Cloud Function

Jangan pernah memasukkan informasi sensitif ke dalam variabel lingkungan Cloud Function

Seringkali di 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 API Firebase, yang bukan rahasia , cukup sematkan dalam kode.
  • Jika 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 diisi secara otomatis di Cloud Functions.
  • Agar kunci dan kredensial pribadi 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 membuat solusi khusus sendiri untuk mengenkripsi informasi tersebut.

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

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

Jika Anda memerlukan konfigurasi lingkungan atau logika yang kompleks, pertimbangkan untuk menggunakan Cloud Run , bukan Cloud Functions.