Skip to content

feat(security): Terapkan Password History (10 Kata Sandi Terakhir) #1095

Description

@analisopendesa

Deskripsi

Untuk meningkatkan keamanan akun pengguna pada seluruh aplikasi OpenKab, perlu diterapkan mekanisme Password History yang mencegah pengguna menggunakan kembali kata sandi yang pernah digunakan sebelumnya.

Sistem wajib menyimpan 10 (sepuluh) kata sandi terakhir untuk setiap akun dan melakukan validasi pada setiap proses perubahan maupun reset kata sandi. Apabila kata sandi baru sama dengan salah satu dari 10 kata sandi terakhir, maka proses harus ditolak.

Fitur ini bertujuan untuk:

  • Mencegah penggunaan ulang kata sandi lama.
  • Meningkatkan efektivitas kebijakan pergantian kata sandi.
  • Mengurangi risiko kompromi akun akibat penggunaan kata sandi yang berulang.
  • Menyesuaikan praktik keamanan aplikasi dengan standar keamanan yang lebih baik.

Ruang Lingkup

  • Menyimpan maksimal 10 riwayat kata sandi untuk setiap pengguna.
  • Berlaku pada seluruh mekanisme perubahan kata sandi, meliputi:
    • Ubah kata sandi melalui profil pengguna.
    • Reset kata sandi melalui email.
    • Reset menggunakan OTP.
    • Reset oleh administrator.
    • Mekanisme lain yang mengubah kata sandi.
  • Melakukan validasi terhadap seluruh riwayat kata sandi sebelum kata sandi baru disimpan.
  • Menampilkan pesan kesalahan apabila pengguna mencoba menggunakan kembali salah satu dari 10 kata sandi terakhir.
  • Menghapus riwayat kata sandi yang paling lama secara otomatis apabila jumlah riwayat melebihi 10.

Ketentuan Teknis

  • Kata sandi tidak boleh disimpan dalam bentuk plaintext.
  • Riwayat kata sandi wajib disimpan menggunakan hashing yang sama dengan kata sandi aktif.
  • Pemeriksaan riwayat dilakukan menggunakan fungsi verifikasi hash (Hash::check() atau mekanisme bawaan framework).
  • Validasi wajib dilakukan di sisi backend dan tidak hanya pada frontend.
  • Audit log (apabila tersedia) hanya mencatat aktivitas perubahan kata sandi tanpa menyimpan isi maupun hash kata sandi.

Acceptance Criteria

  • Sistem menyimpan maksimal 10 riwayat kata sandi untuk setiap pengguna.
  • Pengguna tidak dapat menggunakan kembali salah satu dari 10 kata sandi terakhir.
  • Validasi diterapkan pada seluruh mekanisme perubahan dan reset kata sandi.
  • Riwayat kata sandi disimpan dalam bentuk hash.
  • Riwayat lama dihapus otomatis ketika melebihi 10 data.
  • Pesan kesalahan ditampilkan ketika kata sandi pernah digunakan sebelumnya.
  • Implementasi dilakukan di sisi backend sehingga tidak dapat dilewati melalui manipulasi request.
  • Seluruh pengujian (unit/integration test) untuk fitur Password History berhasil dijalankan.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions