Mengaktifkan atau menonaktifkan perlindungan enumerasi email

Panduan ini menjelaskan fitur perlindungan enumerasi email serta menunjukkan cara mengaktifkan dan menonaktifkannya. Jika Anda membuat project pada atau setelah 15 September 2023, perlindungan enumerasi email akan diaktifkan secara default.

Ringkasan

Enumerasi email adalah jenis serangan brute force di mana pelaku kejahatan mencoba menebak atau mengonfirmasi pengguna dalam sistem dengan meneruskan alamat email ke API dan memeriksa responsnya.

Tanpa perlindungan enumerasi email, Identity Platform akan menampilkan informasi yang dapat digunakan dalam serangan enumerasi email:

  • Upaya dilakukan untuk login dengan alamat email yang tidak ada dalam sistem. Identity Platform menampilkan error EMAIL_NOT_FOUND.

  • Upaya pendaftaran dilakukan dengan alamat email yang sudah ada dalam sistem. Identity Platform menampilkan error EMAIL_EXISTS.

Anda dapat menggunakan fitur perlindungan enumerasi email Identity Platform untuk melindungi akun pengguna di aplikasi Anda dari serangan ini.

Jika perlindungan enumerasi email diaktifkan, project Anda akan memiliki perilaku berikut:

  • fetchSignInForEmail API akan gagal. Menautkan pengguna anonim yang diautentikasi dengan alamat email juga tidak akan berfungsi sebelum SDK versi 22.3.0 untuk Android, 10.18.0 untuk iOS, dan 10.6.0 untuk Web.

  • Daftar metode login untuk alamat email tertentu tidak lagi ditampilkan saat memanggil REST API createAuthUri atau metode SDK klien fetchSignInMethodsForEmail di semua platform.

  • Pengguna tidak dapat mengubah alamat email tanpa memverifikasi alamat baru terlebih dahulu. Misalnya, Anda tidak lagi dapat mengubah alamat email pengguna dengan REST API update, REST API setAccountInfo, atau metode SDK klien updateEmail di semua platform.

    Anda dapat menggunakan verifyBeforeUpdateEmail untuk Web dan Android atau sendEmailVerification(beforeUpdatingEmail:) untuk iOS.

  • Anda tidak dapat lagi menggunakan REST API setAccountInfo untuk menautkan penyedia email/sandi ke akun pengguna yang ada. Anda tidak dapat lagi menggunakan metode SDK klien linkWithCredential dengan EmailAuthCredential di platform mana pun. Sebagai gantinya, gunakan REST API signUp, dengan meneruskan token ID pengguna di kolom idToken dan kolom email, password untuk ditautkan.

  • Menghapus respons error untuk alur verifikasi email, seperti yang dimulai dengan memanggil REST API sendOobCode dengan jenis permintaan VERIFY_AND_CHANGE_EMAIL atau PASSWORD_RESET, dan saat memanggil verifyBeforeUpdateEmail untuk Web dan Android, sendEmailVerification(beforeUpdatingEmail:) untuk iOS, atau metode SDK klien sendPasswordResetEmail di semua platform.

    Saat Anda membuat permintaan reset sandi, email verifikasi hanya dikirim jika alamat email sudah ada; saat Anda membuat permintaan perubahan alamat email, email verifikasi hanya dikirim jika alamat email belum ada. Dalam kedua kasus tersebut, tidak ada pesan error spesifik yang menunjukkan kapan email tidak dikirim.

    Sebaiknya Anda tidak mengizinkan pengguna untuk mendaftar tanpa alur verifikasi email.

  • Kasus login yang tidak valid akan menampilkan respons error INVALID_LOGIN_CREDENTIALS. Kasus pendaftaran yang tidak valid akan terus menampilkan error EMAIL_EXISTS—lihat rekomendasi di bagian berikutnya.

Jika aplikasi Anda mengandalkan salah satu perilaku yang diubah oleh perlindungan enumerasi email, saat ini Anda dapat menonaktifkannya. Namun, tindakan ini tidak direkomendasikan dalam jangka panjang; lihat bagian berikut.

Rekomendasi keamanan

Salah satu metode yang paling umum untuk melakukan serangan pengambilalihan akun adalah melakukan serangan penjejalan kredensial menggunakan kredensial yang bocor atau mudah ditebak. Enumerasi email juga dapat digunakan untuk mendapatkan informasi sensitif tentang pengguna Anda, atau untuk melakukan serangan phishing terhadap mereka. Karena alasan ini, Google menyarankan untuk menggunakan fitur perlindungan enumerasi email untuk melindungi aplikasi Anda dari serangan tersebut.

  • Jika Anda membuat project pada atau setelah 15 September 2023, perlindungan enumerasi email akan diaktifkan secara default. Sebaiknya tetap aktifkan perlindungan enumerasi email dan jangan mengandalkan perilaku yang disebutkan sebelumnya dalam panduan ini.

  • Jika Anda membuat project sebelum 15 September 2023, perlindungan enumerasi email tidak akan diaktifkan secara otomatis.

    Jika aplikasi Anda tidak mengandalkan perilaku yang dijelaskan sebelumnya dalam panduan ini, sebaiknya segera aktifkan perlindungan enumerasi email.

    Jika aplikasi Anda mengandalkan salah satu perilaku yang dijelaskan sebelumnya, sebaiknya Anda mulai bermigrasi untuk tidak melakukannya, dan mengaktifkan perlindungan enumerasi email sesegera mungkin.

Selain menggunakan perlindungan enumerasi email, pertimbangkan untuk mengambil tindakan guna mencegah penyalahgunaan endpoint pendaftaran project Anda yang terus menampilkan error EMAIL_EXISTS. Berikut adalah beberapa cara untuk melakukannya:

  • Aktifkan App Check.
  • Integrasikan reCAPTCHA ke alur pendaftaran Anda.
  • Larang login dengan alamat email dan sandi atau link email, serta gunakan metode alternatif, seperti Login dengan Google.

Mengaktifkan perlindungan enumerasi email

Untuk mengaktifkan perlindungan enumerasi email, ikuti langkah-langkah berikut:

Firebase console

  1. Di Firebase console, buka halaman Setelan Firebase Auth.

    Buka setelan Firebase Auth

    1. Di panel navigasi, pilih Tindakan pengguna.

    2. Pilih Perlindungan enumerasi email (direkomendasikan).

  2. Klik Simpan.

Node.js

  1. Instal Admin SDK.

  2. Untuk mengaktifkan perlindungan enumerasi email, gunakan salah satu opsi berikut:

    • Untuk perlindungan di level project:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: true,
          },
        }
      );
      
    • Untuk perlindungan di level tenant:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().tenantConfigManager().updateTenant(TENANT_ID,
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: true,
          },
        }
      );
      

      Ganti TENANT_ID dengan ID tenant yang ingin Anda aktifkan perlindungan enumerasi emailnya.

REST

  1. Di Konsol Google Cloud, cetak token akses untuk project ID Anda menggunakan perintah gcloud auth print-access-token:

    gcloud auth print-access-token --project=PROJECT_ID
    
  2. Aktifkan perlindungan enumerasi email untuk project ID Anda menggunakan Identity Toolkit API:

    curl -X PATCH -d "{'emailPrivacyConfig':{'enableImprovedEmailPrivacy':true}}" \
        -H 'Authorization: Bearer ACCESS_TOKEN' \
        -H 'Content-Type: application/json' -H 'X-Goog-User-Project: PROJECT_ID' \
        "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=emailPrivacyConfig"
    

Ganti kode berikut:

  • ACCESS_TOKEN: token akses yang Anda buat sebelumnya
  • PROJECT_ID: project ID Anda

Nonaktifkan perlindungan enumerasi email

Untuk menonaktifkan perlindungan enumerasi email, ikuti langkah-langkah berikut:

Firebase console

  1. Di Firebase console, buka halaman Setelan Firebase Auth.

    Buka setelan Firebase Auth

    1. Di panel navigasi, pilih Tindakan pengguna.

    2. Hapus Perlindungan enumerasi email (direkomendasikan).

  2. Klik Simpan.

Node.js

  1. Instal Admin SDK.

  2. Untuk menonaktifkan perlindungan enumerasi email, gunakan salah satu opsi berikut:

    • Untuk perlindungan di level project:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: false,
          },
        }
      );
      
    • Untuk perlindungan di level tenant:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().tenantConfigManager().updateTenant(TENANT_ID,
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: false,
          },
        }
      );
      

      Ganti TENANT_ID dengan ID tenant yang ingin Anda nonaktifkan perlindungan enumerasi emailnya.

REST

  1. Di Konsol Google Cloud, cetak token akses untuk project ID Anda menggunakan perintah gcloud auth print-access-token:

    gcloud auth print-access-token --project=PROJECT_ID
    
  2. Nonaktifkan perlindungan enumerasi email menggunakan Identity Toolkit API:

    curl -X PATCH -d "{'emailPrivacyConfig':{'enableImprovedEmailPrivacy':false}}" \
        -H 'Authorization: Bearer ACCESS_TOKEN' \
        -H 'Content-Type: application/json' -H 'X-Goog-User-Project: PROJECT_ID' \
        "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=emailPrivacyConfig"
    

Ganti kode berikut:

  • ACCESS_TOKEN: token akses yang Anda buat sebelumnya
  • PROJECT_ID: project ID Anda

Contoh respons error

Jika pengguna mencoba login dengan alamat email atau sandi yang salah, atau mencoba mendaftar dengan alamat email yang sudah ada dalam sistem, Identity Platform akan menampilkan error yang mirip dengan berikut ini:

{
"code": "auth/internal-error",
"message": "{\"error\":{\"code\":400,\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"errors\":[{\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"domain\":\"global\",\"reason\":\"invalid\"}]}}"
}