Topik wawancara representatif

Wawancara Backend: Merancang Alur Reset Kata Sandi yang Aman

BackendSulit
Tim Redaksi Offer.ccDipublikasikan Diperbarui

Pertanyaan

Rancang alur reset kata sandi mandiri (self-service) untuk aplikasi web konsumen. Pengguna memasukkan alamat email dan menerima tautan reset HTTPS yang kedaluwarsa setelah 30 menit. Cegah enumerasi akun, email flooding, pengungkapan token, replay, dan race condition antara upaya reset yang bersamaan. Database tidak boleh menyimpan raw reset token. Jelaskan API, model data, batasan transaksi, pembaruan kata sandi dan sesi, batasan MFA, kegagalan, observabilitas, dan pengujian keamanan.

Prompt dan Konteks yang Berlaku

Rancang alur reset kata sandi mandiri berbasis tautan email untuk aplikasi web konsumen. API permintaan menerima alamat email dan, jika ada akun yang cocok, mengirimkan tautan HTTPS yang berisi token buram (opaque token). Token kedaluwarsa 30 menit setelah dibuat. Database tidak boleh menyimpan raw bearer token.

Desain harus mencegah pemanggil yang tidak terautentikasi mengetahui apakah suatu email terdaftar, membanjiri satu kotak masuk (flooding), memutar ulang (replay) tautan yang telah digunakan, mengubah kata sandi pengguna lain, atau memenangkan race condition dengan pengiriman reset kedua. Reset yang berhasil akan mengubah kata sandi, membatalkan setiap reset token yang masih beredar untuk akun tersebut, mencabut sesi terautentikasi yang ada, dan memancarkan notifikasi keamanan. Reset kata sandi tidak menghapus atau mengganti autentikator MFA yang telah terdaftar.

Ini terutama merupakan pertanyaan keamanan dan konsistensi backend. Jawaban yang baik menghubungkan threat model ke kontrak API, siklus hidup token, transaksi database, pengiriman email, model sesi, dan bukti operasional. Menyebutkan token acak dan waktu kedaluwarsa hanyalah permulaan; bagian yang sulit adalah membuat setiap jalur yang dapat diamati dan serentak mematuhi kontrak keamanan yang sama.

Apa yang Dievaluasi oleh Pewawancara

Sinyal pertama adalah pemodelan ancaman (threat modeling). Kandidat harus mengidentifikasi enumerasi akun, reset-email bombing, injeksi Host-header, kebocoran URL, tebakan token, pengungkapan database, replay tautan, perusakan klien (client tampering), konsumsi serentak, sesi yang dicuri, dan bypass MFA. Setiap ancaman harus dipetakan ke kontrol spesifik, bukan sekadar klaim umum bahwa endpoint tersebut aman.

Sinyal kedua adalah perbedaan antara raw token dan verifier yang disimpan. Email berisi rahasia bearer berentropi tinggi. Database hanya menyimpan digest satu arah, sehingga membaca tabel token tidak secara langsung mengungkapkan tautan yang dapat digunakan. Kandidat juga harus membedakan token acak ini dari kata sandi manusia: kata sandi yang dipilih pengguna memerlukan password hash yang lambat, sementara token 256-bit yang acak seragam dapat diindeks oleh cryptographic digest yang cepat tanpa menjadi mudah ditebak.

Sinyal ketiga adalah desain transaksi. Memeriksa used_at dalam kode aplikasi dan memperbaruinya nanti menciptakan race condition replay. Dua token valid yang berbeda untuk pengguna yang sama menciptakan race condition lain kecuali jika akun tersebut menjadi titik serialisasi (serialization point). Jawaban yang kuat mengunci baris pengguna, mengonsumsi token yang diberikan secara kondisional, mengubah kata sandi, mencabut token dan sesi terkait (sibling tokens and sessions), serta mencatat event outbox di dalam satu transaksi singkat.

Sinyal keempat adalah pertimbangan batasan pemulihan (recovery-boundary judgment). Mereset kata sandi yang lupa bukanlah izin untuk menonaktifkan MFA atau mengganti faktor kedua yang hilang. Pemulihan akun dengan jaminan lebih tinggi membutuhkan jalur pembuktian yang dirancang terpisah. Jawaban tersebut juga harus menolak pertanyaan keamanan sebagai satu-satunya mekanisme pemulihan dan menghindari pengiriman kata sandi lama maupun yang baru dibuat melalui email.

Sinyal terakhir adalah pemikiran operasional. Respons umum tidak efektif jika waktu (timing), perilaku rate-limit, log, analitik, atau alat dukungan masih mengungkapkan keberadaan akun atau raw token. Pengiriman email harus bertahan dari kegagalan penyedia layanan tanpa mengubah akun secara prematur, dan pemantauan harus mendeteksi penyalahgunaan tanpa menyimpan rahasia bearer di dalam log.

Pertanyaan untuk Diklarifikasi Sebelum Menjawab

  • Apakah ini penggantian kata sandi atau pemulihan akun penuh? Jika pengguna masih memiliki email terverifikasi

tetapi hanya kehilangan kata sandi, tautan tersebut dapat menggantikan kata sandi itu. Kehilangan akses email, MFA, dan kode pemulihan memerlukan proses pemulihan yang lebih kuat dan terpisah.

  • Apakah akun tersebut menggunakan MFA? Reset kata sandi harus membiarkan faktor yang terdaftar tetap utuh. Jika produk

menginginkan satu alur untuk memulihkan keduanya, persyaratan jaminan dan tinjauan penyalahgunaannya berubah secara substansial.

  • Sesi mana yang harus dicabut? Prompt ini mencabut semua sesi. Membiarkan perangkat pemrakarsa tetap

masuk akan memerlukan bukti bahwa perangkat tersebut sudah tepercaya dan pengecualian yang terdokumentasi dengan jelas.

  • Bolehkah beberapa tautan beredar sekaligus? Mengizinkan jumlah terbatas dalam batas kecil menghindari pembatalan email yang sah

hanya karena pesan yang dikirim belakangan tiba lebih dulu. Tautan mana pun yang berhasil harus mencabut setiap tautan lainnya untuk pengguna tersebut.

  • Saluran risiko dan pengiriman apa yang berlaku? Email mungkin dapat diterima untuk akun konsumen berisiko rendah tetapi

tidak memadai untuk akses finansial atau teregulasi. SMS, kode pemulihan, pembuktian dukungan (support proofing), dan masa tunggu memiliki risiko pengambilalihan dan ketersediaan yang berbeda.

  • Kebijakan kata sandi apa yang sudah mengatur proses masuk (sign-in)? Reset harus menggunakan panjang, blocklist, dan kebijakan

hash yang sama. Kebijakan khusus reset yang lebih lemah menjadi celah bypass autentikasi.

  • Berapa batas anggaran penyalahgunaan (abuse budget) dan batas penyedia email yang ada? Rate limit memerlukan dimensi seperti akun,

IP, perangkat, dan kapasitas penyedia global. Penguncian ketat hanya pada tingkat akun memungkinkan penyerang menolak pemulihan bagi korban yang diketahui.

Kerangka Jawaban 30 Detik

“Saya akan mengembalikan respons 202 dan pesan yang sama untuk setiap email, lalu melakukan pencarian dan pengiriman secara asinkron di balik rate limit berlapis. Untuk akun nyata, saya akan membuat 32 byte acak, mengirimkan token base64url melalui email dalam tautan yang dibangun dari origin HTTPS yang dikonfigurasi, dan hanya menyimpan digest-nya bersama pengguna dan masa kedaluwarsa 30 menit. Halaman GET tidak pernah mengonsumsi token. Pada POST terakhir, saya memvalidasi ulang token tersebut, menghash kata sandi baru, mengunci baris pengguna, menandai token telah digunakan secara atomik, memperbarui kata sandi, mencabut semua token reset dan sesi lainnya, serta menulis event outbox untuk notifikasi dan audit. Permintaan yang serentak atau di-replay kemudian akan gagal pada konsumsi kondisional. Pemulihan MFA tetap menjadi alur terpisah.”

Pembahasan Mendalam Langkah-demi-Langkah

Mulailah dengan dua endpoint publik dan kontrak respons yang sengaja dibuat minimal:

text
POST /password-reset-requests
{ "email": "person@example.com" }

202 Accepted
{ "message": "If an account matches, reset instructions will be sent." }

POST /password-resets
{ "token": "opaque-base64url-value", "new_password": "..." }

Endpoint permintaan mengembalikan status, bentuk pesan, dan kebijakan cache yang sama terlepas dari apakah akun tersebut ada. Endpoint ini harus menyerahkan pekerjaan ke antrean terbatas (bounded queue) sebelum mengembalikan respons sehingga keluar cepat (quick exit) dari database atau panggilan SMTP yang kentara tidak menciptakan timing oracle. Jangan menambahkan jeda waktu tetap (fixed sleep) dan menganggap masalah selesai: kejenuhan antrean, pembatasan (throttle) khusus akun, dan jalur kesalahan yang berbeda masih dapat mengekspos perilaku sistem atau menjadi alat denial-of-service.

Normalisasikan email hanya sesuai dengan aturan identitas terverifikasi dari produk tersebut. Mengubah domain menjadi huruf kecil (lowercasing) mungkin valid; menerapkan aturan khusus penyedia seperti menghapus titik atau tag tanda tambah ke setiap domain dapat menggabungkan dua akun yang berbeda. Terapkan rate limit berlapis di seluruh kunci akun yang dinormalisasi, IP atau jaringan sumber, sinyal perangkat atau risiko, dan anggaran global penyedia email. Eskalasikan lalu lintas yang mencurigakan ke sebuah challenge. Respons publik tetap bersifat umum, dan permintaan lupa kata sandi tidak pernah mengunci akun atau mengubah kata sandinya.

Untuk akun yang ada, buat 32 byte dengan generator acak yang aman secara kriptografis. Itu adalah 256 bit; base64url tanpa padding merepresentasikannya dalam 43 karakter. Ini adalah pilihan desain, bukan aturan kedaluwarsa atau pengodean universal. Simpan SHA-256(raw_token) dan kirimkan raw value hanya melalui tautan email. Karena inputnya seragam secara acak dan berentropi tinggi, digest satu arah yang cepat mendukung pencarian terindeks; menggunakan digest itu sendiri sebagai nilai bearer yang dikirimkan akan gagal karena server menghash input itu lagi. Kata sandi adalah rahasia manusia berentropi rendah dan oleh karena itu membutuhkan password hash yang lambat dan menggunakan salt.

Contoh tabel PostgreSQL adalah:

sql
CREATE TABLE password_reset_tokens (
  id uuid PRIMARY KEY,
  user_id uuid NOT NULL REFERENCES users(id),
  token_digest bytea NOT NULL UNIQUE,
  created_at timestamptz NOT NULL,
  expires_at timestamptz NOT NULL,
  used_at timestamptz,
  revoked_at timestamptz
);

CREATE INDEX password_reset_tokens_active_user_idx
  ON password_reset_tokens (user_id, expires_at)
  WHERE used_at IS NULL AND revoked_at IS NULL;

URL email harus menggunakan origin yang dikonfigurasi atau diizinkan (allowlisted), bukan header Host yang tidak tepercaya. Gunakan HTTPS, sensor (redact) token dari log aplikasi, proksi, analitik, dan error log, serta jauhkan aset pihak ketiga dari halaman reset. Tetapkan kebijakan no-referrer sehingga navigasi tidak membocorkan query token. Permintaan GET dapat menampilkan formulir atau melaporkan bahwa tautan tidak valid, tetapi tidak boleh mengonsumsi token: pemindai keamanan email dan pratinjau tautan secara rutin mengunjungi tautan sebelum pengguna melakukannya.

Jangan mempercayai validasi yang dilakukan selama GET tersebut. Klien yang dimodifikasi dapat memanggil endpoint akhir secara langsung, sehingga metode POST yang mengubah kata sandi harus menerima dan memvalidasi ulang token tersebut. Sebelum membuka transaksi, digest token, temukan kandidat yang belum kedaluwarsa, validasi kata sandi baru, dan hitung password hash yang lambat. Ini menjaga pekerjaan hashing kata sandi yang mahal dan sebagian besar permintaan yang tidak valid tetap berada di luar penguncian akun. Terapkan rate limit pada endpoint ini juga.

Perubahan status akhir menggunakan baris pengguna sebagai titik serialisasi:

text
candidate = find token by SHA-256(raw_token)
reject publicly if candidate is missing, expired, used, or revoked
new_hash = Argon2id(new_password, fresh_salt, tuned_parameters)

BEGIN
  SELECT id FROM users WHERE id = candidate.user_id FOR UPDATE

  UPDATE password_reset_tokens
  SET used_at = now()
  WHERE id = candidate.id
    AND used_at IS NULL
    AND revoked_at IS NULL
    AND expires_at > now()
  RETURNING user_id

  if no row returned: ROLLBACK and reject

  UPDATE users
  SET password_hash = new_hash,
      password_changed_at = now(),
      auth_version = auth_version + 1
  WHERE id = candidate.user_id

  UPDATE password_reset_tokens
  SET revoked_at = now()
  WHERE user_id = candidate.user_id
    AND id <> candidate.id
    AND used_at IS NULL
    AND revoked_at IS NULL

  DELETE FROM sessions WHERE user_id = candidate.user_id

  INSERT security_outbox(password_reset_succeeded, user_id, occurred_at)
COMMIT

Hitung hash sebelum BEGIN, tetapi jangan pernah melakukan commit kecuali pembaruan token kondisional berhasil. Untuk penerapan baru, OWASP saat ini mencantumkan Argon2id dengan memori 19 MiB, dua iterasi, dan satu derajat paralelisme sebagai salah satu konfigurasi minimum; lakukan benchmark dan tingkatkan biayanya sambil tetap menjaga kapasitas autentikasi yang sah tetap aman. Simpan algoritma dan parameter bersama dengan password hash sehingga dapat diperbarui di masa mendatang. Bcrypt adalah fallback lawas dengan batasan panjang input, bukan sinonim yang dapat langsung ditukar.

Kunci baris menangani dua kelas race condition. Jika dua permintaan menyajikan token yang sama, hanya pembaruan kondisional pertama yang dapat menyetel used_at. Jika mereka menyajikan dua token valid yang berbeda untuk satu pengguna, keduanya dapat lolos dari pembacaan awal dan proses hashing, tetapi hanya satu yang memegang kunci pengguna. Transaksi tersebut mencabut token lainnya; setelah permintaan kedua memperoleh kunci, pembaruan kondisionalnya tidak mengembalikan baris apa pun. Oleh karena itu, kata sandi memiliki satu nilai pemenang, dan setiap permintaan yang kalah mendapati status token terminal.

Penghapusan sesi di sisi server memberikan pembatalan langsung untuk sesi yang didukung database. Dengan refresh token, cabut catatan servernya. Untuk access token yang stateless, menaikkan auth_version atau memeriksa password_changed_at hanya berfungsi jika setiap permintaan yang dilindungi membandingkan status server tersebut; tanpa pemeriksaan seperti itu, pencabutan tertunda hingga masa kedaluwarsa token. Jelaskan batasan tersebut secara eksplisit daripada mengklaim bahwa menghapus cookie browser akan mencabut sesi penyerang di tempat lain.

Tulis notifikasi keberhasilan dan event audit keamanan melalui outbox dalam transaksi yang sama, lalu kirimkan setelah commit. Notifikasi berisi waktu, panduan pemulihan akun, dan cara melaporkan penipuan, tanpa pernah menyertakan kata sandi lama atau baru. Gangguan pada penyedia notifikasi harus memicu percobaan ulang dan peringatan; hal itu tidak boleh membatalkan (rollback) kata sandi yang telah diubah. Di sisi permintaan, token dan tugas pengiriman email harus terhubung secara tahan lama (durable) sehingga commit database yang diikuti oleh kegagalan antrean tidak menelantarkan permintaan secara diam-diam. Pola outbox atau satu penyimpanan tugas transaksional menyelesaikan batasan tersebut.

Izinkan sejumlah tautan beredar yang terbatas alih-alih mencabut tautan sebelumnya pada setiap permintaan. Penggantian langsung memungkinkan penyerang berulang kali meminta reset dan membatalkan email korban sebelum sempat dibuka. Batasi baris yang beredar, cabut atau kedaluwarsakan yang paling lama ketika batas tercapai, dan cabut semua baris yang tersisa setelah berhasil. Hapus baris terminal dan kedaluwarsa secara berkala sesuai dengan kebijakan retensi audit.

Token buram yang disimpan biasanya lebih sederhana daripada tautan reset JWT mandiri (self-contained). JWT yang ditandatangani tetap membutuhkan status server untuk penggunaan satu kali yang instan, pencabutan di seluruh akun pengguna, dan race condition perubahan kata sandi; setelah status tersebut ada, token acak ditambah digest memiliki klaim dan jalur penguraian yang lebih sedikit. PIN pendek berguna untuk entri manual tetapi memiliki entropi yang jauh lebih kecil, sehingga memerlukan pembatasan upaya (attempt throttling) yang ketat dan sesi reset terbatas setelah verifikasi.

Pemantauan harus melacak tingkat permintaan berdasarkan dimensi risiko, penundaan antrean, kesalahan penyedia, hasil pengiriman, kegagalan verifikasi token, usia token saat berhasil, upaya replay, dan kegagalan pencabutan sesi. Jauhkan raw email, token, kata sandi baru, dan URL reset lengkap dari metrik dan log. Peringatan harus mendeteksi kampanye global maupun flooding pada satu akun tanpa mengekspos keberadaan akun dalam respons publik.

Uji alur sebagai mesin status (state machine), bukan hanya sebagai endpoint dengan skenario sukses (happy-path). Kirimkan POST paralel dengan token yang sama dan dengan dua token berbeda untuk satu pengguna; tepat satu yang boleh berhasil. Verifikasi masa kedaluwarsa pada batas waktu, penggunaan kembali setelah berhasil, pencabutan sibling token, akun yang tidak ada, pemadaman antrean dan email, manipulasi Host-header, kebocoran Referer, penyensoran log, dimensi rate-limit, penolakan sesi pada perangkat lain, percobaan ulang notifikasi, dan akun dengan MFA. Pemindai keamanan harus dapat melakukan GET pada tautan tanpa mengonsumsinya.

Contoh Jawaban Berkualitas Tinggi

“Saya akan mendefinisikan reset token sebagai autentikator sementara dan merancang seluruh siklus hidupnya. Endpoint permintaan selalu mengembalikan respons 202 yang sama. Endpoint ini mengantrekan pencarian dan pengiriman di balik kontrol penyalahgunaan tingkat akun, jaringan, perangkat, dan penyedia, tetapi tidak pernah mengunci atau mengubah akun hanya karena seseorang mengetikkan alamat email.

Untuk akun yang cocok, saya membuat 32 byte acak, mengirimkan nilai base64url dalam tautan HTTPS, dan hanya menyimpan digest SHA-256, ID pengguna, dan masa kedaluwarsa 30 menit. Origin reset dikonfigurasi, bukan diturunkan dari Host; halaman tidak memiliki sumber daya pihak ketiga, menggunakan kebijakan no-referrer, dan semua pipeline log menyensor token tersebut. GET hanya menampilkan formulir karena pemindai email dapat membuka tautan tersebut.

POST terakhir memvalidasi token lagi dan menghash kata sandi baru sebelum memulai transaksi singkat. Di dalam transaksi, saya mengunci baris pengguna, menandai token tersebut telah digunakan secara kondisional, memperbarui kata sandi dan versi autentikasi, mencabut setiap sibling reset token dan sesi di sisi server, serta menyisipkan event outbox. Pembaruan kondisional menggagalkan replay token yang sama; kunci pengguna ditambah pencabutan sibling membuat dua token berbeda diserialisasikan menjadi satu pemenang.

Setelah commit, worker mengirimkan notifikasi keamanan dan mencoba ulang secara independen. Saya akan menguji respons umum dan timing, kebocoran token dan URL, penggunaan serentak, kedaluwarsa, kegagalan penyedia, penolakan sesi jarak jauh, dan akun MFA. Mereset kata sandi membiarkan MFA tetap utuh; kehilangan semua autentikator harus melalui proses pemulihan terpisah dengan jaminan yang lebih tinggi.”

Kesalahan Umum

  • Mengembalikan “email tidak ditemukan” → penyerang dapat mengenumerasi akun yang terdaftar → **kembalikan status

dan pesan publik yang sama serta hindari jalur keluar cepat yang menimbulkan timing oracle.**

  • Menyimpan raw token → pembaca database mendapatkan tautan reset yang berfungsi → **simpan digest satu arah dan

sensor raw value di mana saja kecuali saat pengiriman dan pengiriman oleh pengguna.**

  • Menggunakan ID pengguna dari formulir akhir → klien dapat menukar akun target → **turunkan data pengguna hanya

dari catatan token di sisi server.**

  • Mengonsumsi tautan pada GET → pemindai email dapat membatalkannya sebelum pengguna tiba → **konsumsi

hanya selama pemanggilan POST yang mengubah kata sandi.**

  • Memvalidasi pada GET tetapi tidak pada POST → klien palsu dapat melewati formulir yang ditampilkan → **validasi ulang masa kedaluwarsa

dan status terminal dalam transaksi akhir di sisi server.**

  • Memeriksa lalu memperbarui tanpa kondisi → permintaan paralel dapat sama-sama lolos pemeriksaan → **gunakan

pembaruan kondisional di dalam transaksi dan serialisasikan token yang berbeda pada baris pengguna.**

  • Membatalkan tautan sebelumnya pada setiap permintaan → penyerang dapat membuat email terbaru korban terus menjadi

usang → izinkan sejumlah batas tertentu dan cabut semua sibling hanya setelah salah satunya berhasil.

  • Membangun URL dari Host permintaan yang teracuni dapat mengirim domain reset yang dikendalikan penyerang →

gunakan origin HTTPS yang dikonfigurasi atau diizinkan (allowlisted).

  • Memasukkan token ke dalam log atau analitik → sistem observabilitas menjadi tempat penyimpanan kredensial → **sensor

query string dan larang sumber daya pihak ketiga pada halaman reset.**

  • Login otomatis setelah reset tanpa kebijakan sesi → fiksasi sesi dan perilaku sesi yang dicuri

menjadi tidak jelas → wajibkan login normal dan cabut sesi sisi server secara eksplisit.

  • Mereset MFA bersamaan dengan kata sandi → penguasaan satu email dapat mengalahkan faktor yang lebih kuat → **pertahankan

pemulihan MFA sebagai alur terpisah berbasis risiko.**

  • Mengirim kata sandi baru melalui email → kata sandi tersimpan di saluran yang tidak aman dan penyerang dapat

mengunci korban → kirim tautan dengan batas waktu dan jangan ubah apa pun sampai bukti yang valid dikirimkan.

Pertanyaan Lanjutan dan Tanggapan

Pertanyaan Lanjutan 1: Apa yang berubah jika produk menggunakan access token JWT yang stateless?

Cabut refresh token di server. Untuk pembatalan access token seketika, sertakan versi autentikasi atau nilai issued-at dan bandingkan dengan status server saat ini pada setiap permintaan yang dilindungi. Jika arsitektur menolak pencarian tersebut atau penolakan cache pencabutan, access token lama tetap valid hingga kedaluwarsa; nyatakan paparan risiko maksimum tersebut daripada menjanjikan logout instan.

Pertanyaan Lanjutan 2: Haruskah permintaan baru membatalkan setiap tautan reset sebelumnya?

Biasanya tidak sebelum ada yang berhasil. Email dapat tertunda atau urutannya tertukar, dan penyerang yang mengetahui alamat email tersebut dapat terus-menerus membatalkan tautan terbaru korban. Pertahankan sejumlah kecil token yang belum kedaluwarsa, kendalikan volume permintaan, dan cabut setiap sibling dalam transaksi perubahan kata sandi yang berhasil. Produk berisiko tinggi dapat memilih penggantian yang lebih ketat, tetapi harus menerima kompromi ketersediaan tersebut.

Pertanyaan Lanjutan 3: Bagaimana Anda mendukung kode enam digit alih-alih token URL?

Kode enam digit memiliki entropi yang jauh lebih kecil daripada token 256-bit. Ikatkan kode tersebut ke akun dan upaya reset yang cakupannya sempit, terapkan pembatasan upaya (throttling) dan masa kedaluwarsa di sisi server, serta buat sesi reset berumur pendek hanya setelah verifikasi berhasil. Jangan biarkan kode yang terverifikasi menjadi sesi terautentikasi umum atau mengizinkan klien memilih ID pengguna.

Pertanyaan Lanjutan 4: Aturan kata sandi baru apa yang akan Anda terapkan?

Gunakan kebijakan verifier yang sama seperti saat sign-in. Jika produk mengadopsi panduan NIST saat ini, kata sandi yang digunakan sebagai faktor tunggal memiliki batas minimum 15 karakter; kata sandi yang hanya digunakan dalam MFA dapat memiliki batas minimum 8 karakter. Izinkan setidaknya 64 karakter, tolak nilai umum atau yang telah disusupi menggunakan blocklist, dan jangan menambahkan aturan komposisi arbitrer atau rotasi berkala. Sesuaikan biaya password-hash secara terpisah dari aturan input ini.

Pertanyaan Lanjutan 5: Bagaimana jika pengguna juga kehilangan akses ke email dan MFA?

Itu adalah pemulihan akun penuh, bukan endpoint reset kata sandi ini. Gunakan kode atau kontak pemulihan yang telah didaftarkan sebelumnya, autentikator yang tersisa, pembuktian identitas berulang, masa tunggu, dan peninjauan manual sesuai dengan risiko akun. Perubahan pada alamat pemulihan itu sendiri memerlukan verifikasi dan notifikasi independen. Jangan pernah kembali ke pertanyaan keamanan yang mudah diteliti sebagai satu-satunya bukti.

Pertanyaan Lanjutan 6: Bagaimana Anda memverifikasi bahwa enumerasi akun benar-benar terkendali?

Bandingkan akun yang ada dan yang tidak ada di seluruh status, body, header, perilaku cache, distribusi latensi, transisi rate-limit, dan efek samping downstream. Uji di bawah kondisi kejenuhan antrean dan kegagalan penyedia layanan, bukan hanya saat pengujian lokal yang tenang. Tinjau log CDN, proksi, aplikasi, analitik, dan log dukungan untuk memeriksa keberadaan pengidentifikasi dan URL lengkap, serta pastikan bahwa dasbor penyalahgunaan mengekspos sinyal agregat tanpa berubah menjadi layanan pencarian keberadaan akun.

Sumber publik

Pertanyaan terkait