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 kasar, seperti (DOS) serangan denial-of-service, mengatur pemantauan dan mengingatkan untuk Cloud Firestore , Realtime database , Cloud Storage , dan Hosting

Jika Anda menduga serangan pada aplikasi Anda, menjangkau Dukungan sesegera mungkin untuk membiarkan mereka tahu apa yang terjadi.

Aktifkan Pemeriksaan Aplikasi

Untuk membantu memastikan hanya aplikasi dapat mengakses layanan backend, aktifkan App Periksa untuk setiap layanan yang mendukung hal itu.

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 kasus bersamaan dari fungsi 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 Anda Penggunaan dan dashboard penagihan , tetapi Anda juga dapat mengatur alert anggaran pada proyek Anda untuk diberitahu ketika penggunaan sumber daya yang 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-kesalahan ini dari mempengaruhi layanan hidup dengan melakukan pengembangan Anda dengan Firebase emulator Suite .

(Dan jika Anda sengaja DOS sendiri, undeploy fungsi Anda dengan menghapus dari index.js kemudian menjalankan firebase deploy --only functions .)

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

Jika Anda tidak perlu menunjukkan hasil dari fungsi secara real time, Anda dapat mengurangi terhadap lalu lintas kasar dengan mengolah hasil dalam batch: mempublikasikan hasil ke Pub / Sub topik, dan memproses hasil secara berkala dengan fungsi dijadwalkan .

Pahami kunci API

Kunci API untuk layanan Firebase bukan rahasia

Kunci penggunaan API Firebase hanya untuk mengidentifikasi proyek Firebase aplikasi untuk layanan Firebase, dan tidak mengontrol akses ke database atau data Cloud Storage, yang dilakukan dengan menggunakan Firebase Aturan Keamanan . 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 mencoba menggunakan API key Anda permintaan spoof, Anda dapat membuat kunci API scoped untuk klien aplikasi Anda .

Jaga kerahasiaan kunci server FCM

Kunci API seperti untuk layanan Firebase, kunci FCM Server (digunakan oleh warisan FCM HTTP API ) yang sensitif dan harus dirahasiakan.

Jaga kerahasiaan kunci akun layanan

Juga kunci tidak seperti API untuk layanan Firebase, layanan rekening kunci pribadi (yang digunakan oleh Admin SDK ) yang 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 menjaga dengan perkembangan aplikasi Anda, tes unit aturan dengan Firebase emulator Suite dan menambahkan tes ini untuk pipa 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 JWTs kustom dari lingkungan yang terpercaya, kemudian lulus token ke klien Anda, yang menggunakan token untuk mengotentikasi ( iOS + , Android , Web , Unity , C ++ ).

Untuk contoh menggunakan otentikasi kustom dengan penyedia pihak ketiga, lihat posting 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 otentikasi email-sandi Firebase ini berhasil, mengencangkan kuota default dari identitytoolkit.googleapis.com endpoint untuk mencegah serangan brute force. Anda dapat melakukannya dari halaman API dalam Cloud Console Google .

Upgrade ke Cloud Identity Platform untuk autentikasi multi-faktor

Untuk keamanan ekstra pada sign-in, Anda dapat menambahkan dukungan otentikasi multi-faktor dengan upgrade 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 untuk bertahan data di luar restart aplikasi pada perangkat tunggal, mengkonversi pengguna ke 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 itu dalam pikiran, melindungi semua data non-publik dengan aturan keamanan yang memerlukan tertentu sign-in metode atau alamat email diverifikasi .

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 dari kesalahan dan pelanggaran dengan membatasi akses ke data produksi baik menggunakan peran yang telah ditetapkan atau peran IAM kustom.

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 tidak aman.

Mengatur pemantauan untuk Fungsi; periksa setelah pembaruan perpustakaan

Jika Anda menggunakan SDK Cloud Fungsi logger , Anda dapat memantau dan waspada dari perilaku yang tidak biasa, termasuk perilaku yang disebabkan oleh update perpustakaan.

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 Fungsi Cloud. Karena Cloud Functions menggunakan kembali lingkungan di antara pemanggilan fungsi, informasi sensitif tidak boleh disimpan di lingkungan.

  • Untuk menyimpan Firebase kunci API, yang tidak rahasia , hanya menanamkan mereka 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 menelepon API Google dan Google Cloud yang membutuhkan kredensial account layanan, perpustakaan Google Tupoksi untuk Node.js bisa mendapatkan mandat ini dari mandat aplikasi default , yang secara otomatis diisi dalam Fungsi Cloud.
  • Untuk membuat kunci pribadi dan mandat untuk layanan non-Google tersedia untuk Fungsi Cloud Anda, gunakan Cloud Rahasia Manajer .

Enkripsi informasi sensitif

Jika Anda tidak dapat menghindari meneruskan 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 perlu logika atau lingkungan konfigurasi yang rumit, pertimbangkan untuk menggunakan Cloud Run bukan Fungsi Cloud.