Menambahkan Salt pada Pendaftaran
Jadi, Anda sudah tahu bahwa hashing menggunakan
md5 adalah proses yang tidak dapat dibalik dan hacker,
yang mendapatkan akses ke hash, tidak akan bisa mendapatkan
password dari hash tersebut.
Sebenarnya pernyataan ini tidak sepenuhnya benar - saat ini hacker jahat telah menyusun library hash dari password yang populer dan tidak terlalu populer dan siapa pun bisa menebak password, hanya dengan mencari hash-nya di Google.
Ini berkaitan dengan password yang cukup sederhana dan populer.
Coba cari di Google, misalnya, hash 827ccb0eea8a706c4c34a16891f84e7b
dan Anda akan langsung melihat di pencarian Google, bahwa itu adalah
password '12345'.
Hash dari password yang cukup kompleks tidak bisa ditebak dengan cara seperti ini (coba saja).
Anda mungkin bertanya, apa masalahnya then - mari kita semua mendaftar dengan password yang kompleks. Namun, ada masalahnya - sebagian besar pengguna tidak memikirkan keamanan data mereka dan mungkin memasukkan password yang cukup sederhana.
Kita bisa memaksa untuk membuat
password yang lebih panjang saat pendaftaran, dengan membatasi, misalnya,
jumlah minimal karakter menjadi 6
atau 8, namun, tetap akan muncul
password seperti '123456' atau '12345678'.
Tentu saja, kita bisa membuat algoritma yang lebih pintar untuk memeriksa kompleksitas password, tetapi ada solusi lainnya.
Inti dari solusi ini adalah: password harus diberi salt. Salt adalah string acak khusus, yang akan ditambahkan ke password saat pendaftaran dan hash akan dihitung bukan dari password biasa, melainkan dari string salt+password, yaitu dari password yang telah diberi salt.
Artinya, saat pendaftaran Anda akan melakukan sesuatu seperti ini:
<?php
$salt = '1sJg3hfdf'; // salt - string acak yang kompleks
$password = md5($salt . $_POST['password']); // ubah password menjadi hash yang diberi salt
?>
Dalam hal ini, salt akan berbeda untuk setiap pengguna, salt perlu digenerate secara acak pada saat pendaftaran.
Berikut adalah fungsi siap pakai yang akan melakukannya:
<?php
function generateSalt()
{
$salt = '';
$saltLength = 8; // panjang salt
for($i = 0; $i < $saltLength; $i++) {
$salt .= chr(mt_rand(33, 126)); // karakter dari ASCII-table
}
return $salt;
}
?>
Dengan fungsi ini, kode kita bisa ditulis ulang seperti ini:
<?php
$salt = generateSalt(); // salt
$password = md5($salt . $_POST['password']); // password yang diberi salt
?>
Saya ulangi lagi, bahwa ini adalah perubahan saat pendaftaran - di database kita menyimpan bukan hanya hash password, tetapi hash dari password yang telah diberi salt.
Belum selesai: di tabel user selain
kolom login dan password, perlu
ditambahkan kolom salt, di mana
kita akan menyimpan salt setiap pengguna.
Implementasikan pendaftaran dengan password yang diberi salt seperti yang dijelaskan di atas.