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
Enumerasi email adalah jenis serangan brute force yang dilakukan oleh pelaku kejahatan yang 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 dilakukan untuk mendaftar dengan alamat email yang sudah ada di 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. Penautan 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 yang ditentukan tidak lagi ditampilkan saat memanggil
createAuthUri
REST API atau metode SDK klienfetchSignInMethodsForEmail
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 klienupdateEmail
di semua platform.Sebagai gantinya, Anda dapat menggunakan
verifyBeforeUpdateEmail
untuk Web dan Android atausendEmailVerification(beforeUpdatingEmail:)
untuk iOS.Anda tidak dapat lagi menggunakan
setAccountInfo
REST API untuk menautkan penyedia email/sandi ke akun pengguna yang ada. Anda tidak dapat lagi menggunakan metode SDK klienlinkWithCredential
denganEmailAuthCredential
di platform mana pun. Sebagai gantinya, gunakansignUp
REST API, dengan meneruskan token ID pengguna di kolomidToken
dan kolomemail
,password
untuk ditautkan.Menghapus respons error untuk alur verifikasi email, seperti yang dimulai dengan memanggil
sendOobCode
REST API dengan jenis permintaanVERIFY_AND_CHANGE_EMAIL
atauPASSWORD_RESET
, dan saat memanggilverifyBeforeUpdateEmail
untuk Web dan Android,sendEmailVerification(beforeUpdatingEmail:)
untuk iOS, atau metode SDK kliensendPasswordResetEmail
di semua platform.Saat Anda membuat permintaan reset sandi, email verifikasi hanya akan dikirim jika alamat email sudah ada; saat Anda membuat permintaan perubahan alamat email, email verifikasi hanya akan 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 mendaftar tanpa alur verifikasi email.
Kasus login yang tidak valid akan menampilkan respons error
INVALID_LOGIN_CREDENTIALS
. Kasus pendaftaran yang tidak valid terus menampilkan errorEMAIL_EXISTS
—lihat rekomendasi di bagian berikutnya.
Jika aplikasi Anda mengandalkan perilaku apa pun yang diubah oleh perlindungan enumerasi email, saat ini Anda dapat menonaktifkannya. Namun, hal 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 credential stuffing 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 penggunaan fitur perlindungan enumerasi email untuk melindungi aplikasi Anda dari serangan tersebut.
Jika Anda membuat project pada atau setelah tanggal 15 September 2023, perlindungan enumerasi email akan diaktifkan secara default. Sebaiknya Anda 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 otomatis diaktifkan.
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 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 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
Di Firebase console, buka halaman Firebase Auth Settings.
Di panel navigasi, pilih Tindakan pengguna.
Pilih Perlindungan enumerasi email (direkomendasikan).
Klik Simpan.
Node.js
Instal Admin SDK.
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
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
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
Di Firebase console, buka halaman Firebase Auth Settings.
Di panel navigasi, pilih Tindakan pengguna.
Hapus centang pada Perlindungan enumerasi email (direkomendasikan).
Klik Simpan.
Node.js
Instal Admin SDK.
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
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
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 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\"}]}}"
}