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 klienfetchSignInMethodsForEmail
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 APIsetAccountInfo
, atau metode SDK klienupdateEmail
di semua platform.Anda dapat menggunakan
verifyBeforeUpdateEmail
untuk Web dan Android atausendEmailVerification(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 klienlinkWithCredential
denganEmailAuthCredential
di platform mana pun. Sebagai gantinya, gunakan REST APIsignUp
, dengan meneruskan token ID pengguna di kolomidToken
dan kolomemail
,password
untuk ditautkan.Menghapus respons error untuk alur verifikasi email, seperti yang dimulai dengan memanggil REST API
sendOobCode
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 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 errorEMAIL_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
Di Firebase console, buka halaman Setelan Firebase Auth.
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 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
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 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
Di Firebase console, buka halaman Setelan Firebase Auth.
Di panel navigasi, pilih Tindakan pengguna.
Hapus Perlindungan enumerasi email (direkomendasikan).
Klik Simpan.
Node.js
Instal Admin SDK.
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
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 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\"}]}}"
}