Penghashan Kata Laluan pada PHP
Menyimpan kata laluan dalam bentuk terbuka adalah tidak betul. Penggodam berniat jahat boleh mendapatkan akses kepada pangkalan data anda dan mencuri kata laluan.
Oleh itu, biasanya login disimpan dalam bentuk
terbuka, manakala kata laluan dihash menggunakan fungsi khas
md5, yang menerima kata laluan sebagai parameter
dan mengembalikan hash-nya, yang mana
tidak boleh digunakan untuk memulihkan kata laluan asal.
Sebagai contoh, mari cari hash untuk sesuatu rentetan:
<?php
echo md5('12345'); // akan memaparkan '827ccb0eea8a706c4c34a16891f84e7b'
?>
Sekarang kita perlu mengubah suai pendaftaran dan pengesahan kita. Untuk permulaan, saya menasihatkan untuk mengosongkan jadual pengguna, kerana buat masa ini kata laluan disimpan dalam bentuk terbuka di sana, sedangkan sepatutnya hash kata laluan tersebut yang disimpan. Kemudian, semasa menguji pendaftaran, jadual akan diisi dengan data dalam format baharu.
Sekarang mari kita betulkan pendaftaran kita supaya apabila menyimpan pengguna baharu ke pangkalan data, bukannya kata laluan, tetapi hash-nya yang ditambah.
Pembetulan yang diterangkan akan kelihatan seperti something like this:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // tukar kata laluan kepada hash-nya
$query = "INSERT INTO users SET login='$login', password='$password'";
?>
Mari buat pembetulan yang serupa dalam pengesahan:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // tukar kata laluan kepada hash-nya
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
?>
Buat perubahan pada pendaftaran dengan mengambil kira penghashan, daftarkan beberapa pengguna baharu, pastikan mereka telah ditambah ke pangkalan data dengan kata laluan yang telah dihash.
Buat perubahan pada pengesahan dengan mengambil kira penghashan, cuba sahkan log masuk menggunakan pengguna yang didaftarkan sebelum ini.