Potongan kode di atas dimaksudkan untuk fungsi pengubahan kata sandi. Terdapat kerentanan keamanan, yaitu tidak memiliki otentikasi pengguna yang kuat. Sehingga tidak dapat memastikan bahwa permintaan penggantian kata sandi dibuat oleh pengguna yang memiliki email yang sedang diproses.
Hal ini memungkinkan celah kerentanan tersebut dapat dieksploitasi oleh penyerang yang mengetahui alamat email pengguna. ID pengguna dapat diperoleh dengan mudah dari fungsi email_exists($email)
, sehingga selanjutnya kata sandi dari pengguna tersebut dapat diatur ulang tanpa memverifikasi identitas pengguna yang sedang login.
Patch (perbaikan) dengan menambahkan identity validation
Identity validation bertujuan untuk memeriksa bahwa tindakan penggantian kata sandi hanya dilakukan oleh pengguna yang sedang login saja. Hal ini dapat mencegah pembaruan kata sandi secara sembarangan oleh pengguna lain yang tidak sah.
Implementasinya dengan cara memastikan ID pengguna yang saat ini login cocok dengan ID pengguna yang diperoleh dari email (lihat fungsi email_exists($email)
). Jika tidak cocok, proses selanjutnya (update kata sandi) tidak diizinkan.
P.S.:
Snippet di atas didapat dari riset software plugin WordPress: Login with phone number