Bukan tanpa SSL
Ini tidak aman jika kata sandi dikirim melalui jaringan dalam teks biasa. Hashing kata sandi di sisi server juga tidak aman jika kata sandi dikirim melalui jaringan dalam teks biasa.
Karena <input type="password"/>
tag HTML mengirimkan kontennya dalam teks biasa, ini akan menjadi masalah tidak peduli bagaimana Anda menyimpan kata sandi di server, kecuali situs web Anda menggunakan SSL untuk mengirimkan kata sandi.
(Otentikasi HTTP, yang memunculkan kotak dialog di browser yang meminta kata sandi, mungkin atau tidak menjadi teks yang jelas, tergantung pada mekanisme otentikasi apa yang dimiliki server dan browser. Jadi itu bisa menjadi cara untuk menghindari ini tanpa menggunakan SSL.)
Tidak jika administrator situs dicurigai
Sekarang, seandainya Anda menggunakan HTTPS untuk melakukan situs web, ini bisa aman jika Anda mempercayai administrator situs Anda (yang dapat membaca kata sandi teks biasa), dan orang lain yang memiliki akses ke mesin untuk berperilaku baik. Sekarang, mungkin jelas bahwa mereka dapat melakukan apa pun yang mereka inginkan dengan situs web Anda (karena mereka mengelolanya), tetapi jika mereka dapat membaca kata sandi, mereka juga dapat menggunakan pasangan login / kata sandi yang dicuri di situs orang lain.
Cara yang membuat kata sandi aman dari administrator
Satu cara aman untuk menyimpan dan memeriksa kata sandi adalah sebagai berikut:
def change_password user, new_password
salt = random(65536).to_s(16) #will be 4 characters long
password_hash = salt + hash(salt + new_password)
store(user,password_hash)
end
def does_password_match? user, entered_password
correct_password_hash = retrieve(user)
salt = correct_password_hash[0...4]
entered_password_hash = salt + hash(salt + entered_password)
return correct_password_hash == entered_password_hash
end
Untuk fungsi hash, coba gunakan sesuatu yang kuat, dan sesuatu yang belum memiliki tabel pelangi yang bagus di alam liar. Anda dapat mengubah panjang garam jika perlu bekerja di sekitar meja pelangi.
Bergantung pada lingkungan tempat Anda berada, variabilitas dalam latensi jaringan Anda, dan apakah nama pengguna dimaksudkan untuk diketahui secara publik, Anda mungkin ingin agar jalur kode lain menghitung hash('0000'+entered_password)
jika pengguna tidak ada, untuk mencegah penyerang dari menentukan nama pengguna mana yang valid berdasarkan waktu yang dibutuhkan menentukan bahwa kata sandi salah.