Keamanan Password di CodeIgniter 3

Password adalah data paling sensitif dalam sebuah aplikasi. Di CodeIgniter 3, kesalahan umum adalah mengambil input secara sembarangan dan menyimpan password dengan cara yang salah.


Kesalahan Umum Developer CI3

  • Menggunakan md5 / sha1 / sha512
  • Tidak menggunakan salt
  • Meng-hash password secara manual
  • Menyimpan password asli

Semua cara di atas tidak aman.


❌ Contoh Cara Tidak Aman (CI3)


$password = $this->input->post('password');
$hash     = hash('sha512', $password);

Masalahnya:

  • Tidak ada salt
  • Password sama menghasilkan hash sama
  • Rentan rainbow table

❌ Salt Manual Tetap Salah


$password = $this->input->post('password');
$salt     = 'rahasia_aplikasi';

$hash = hash('sha512', $salt . $password);

Kenapa ini tetap berbahaya:

  • Salt statis
  • Jika bocor, semua password bocor
  • Hash terlalu cepat untuk password

✅ Cara Aman dan Benar di CodeIgniter 3

Gunakan fungsi bawaan PHP yang memang dibuat khusus untuk password:

  • password_hash()
  • password_verify()

CodeIgniter 3 cukup sebagai pengambil input saja.


Menyimpan Password (Register) – CI3


$password = $this->input->post('password', TRUE);

$hash = password_hash(
    $password,
    PASSWORD_BCRYPT
);

// simpan $hash ke database

Yang disimpan ke database adalah hash, bukan password asli.


Memverifikasi Password (Login) – CI3


$password = $this->input->post('password', TRUE);
$hash_db  = $user->password;

if (password_verify($password, $hash_db)) {
    // login berhasil
} else {
    // login gagal
}

Tidak perlu meng-hash ulang input user secara manual. PHP yang mengurus pencocokannya.


Migrasi Aplikasi Lama CI3

Jika aplikasi lama sudah terlanjur memakai SHA atau MD5:

  • Jangan migrasi massal
  • Migrasi saat user login

$password = $this->input->post('password', TRUE);

if (hash('sha512', $password) === $hash_lama) {

    $hash_baru = password_hash($password, PASSWORD_BCRYPT);

    // update password ke database
}

Kesimpulan

  • Gunakan $this->input->post() di CI3
  • Jangan gunakan md5 / sha
  • Jangan simpan password asli
  • Gunakan password_hash()
  • Gunakan password_verify()

Keamanan password bukan soal framework, tapi soal tidak salah konsep.

Komentar

Postingan populer dari blog ini

Catatan Training Drills Top Eleven per Posisi

Tokopedia.com - Solusi Belanja Cepat dan Hemat untuk Kebutuhan Sehari-hari Anda

Mengapa Saya Memutuskan Tidak Menjadi Platinum Buyer di Tokopedia