Mengaktifkan atau menonaktifkan perlindungan enumerasi email

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

Ringkasan

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

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

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

  • Upaya dilakukan untuk mendaftar 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:

  • API fetchSignInForEmail akan gagal. Menautkan pengguna yang diautentikasi anonim 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 mereka tanpa memverifikasi alamat baru terlebih dahulu. Misalnya, Anda tidak dapat lagi mengubah alamat email pengguna dengan update REST API, setAccountInfo REST API, 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. Gunakan REST API signUp sebagai gantinya, dengan meneruskan token ID pengguna di kolom idToken dan kolom email, password untuk menautkan.

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

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

    Sebaiknya Anda tidak mengizinkan pengguna mendaftar tanpa alur verifikasi email.

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

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

Rekomendasi keamanan

Salah satu metode paling umum untuk melakukan serangan pengambilalihan akun adalah dengan melakukan serangan credential stuffing menggunakan kredensial yang bocor atau mudah ditebak. Pencarian email juga dapat digunakan untuk mendapatkan informasi sensitif tentang pengguna Anda, atau untuk melakukan serangan phishing terhadap mereka. Oleh karena itu, Google menyarankan penggunaan fitur perlindungan enumerasi email untuk melindungi aplikasi Anda dari serangan semacam itu.

  • Jika Anda membuat project pada atau setelah tanggal 15 September 2023, perlindungan enumerasi email akan diaktifkan secara default. Sebaiknya Anda tetap mengaktifkan perlindungan enumerasi email dan tidak mengandalkan perilaku apa pun yang tercantum 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 apa pun 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 dari perilaku tersebut, dan aktifkan perlindungan enumerasi email sesegera mungkin.

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

  • Aktifkan App Check.
  • Integrasikan reCAPTCHA ke dalam alur pendaftaran Anda.
  • Jangan izinkan login dengan alamat email dan sandi atau link email, dan 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 Authentication Settings.

    Buka Setelan Autentikasi

    1. Di panel Pengelolaan akun pengguna, 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 tingkat project:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: true,
          },
        }
      );
      
    • Untuk perlindungan di tingkat 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 ID project 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

Menonaktifkan perlindungan enumerasi email

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

Firebase console

  1. Di Firebase console, buka halaman Authentication Settings.

    Buka Setelan Autentikasi

    1. Di panel Pengelolaan akun pengguna, pilih Tindakan pengguna.

    2. Hapus pilihan 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 tingkat project:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: false,
          },
        }
      );
      
    • Untuk perlindungan di tingkat 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. Menonaktifkan 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 di 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\"}]}}"
}