我知道,出於安全原因,有必要對用戶的密碼進行哈希處理並將其與存儲的哈希密碼進行比較,如果其他人獲取哈希的字符串,他將無法計算回密碼或在彩虹表中查找密碼。使用PHP和javaScript登錄解決方案的密碼哈希
有一部分方法我不明白。比方說,我有這個標準的登錄表單
<form method='post' action='login.php'>
<input type='text' name='user' />
<input type='password' name='password' />
<input type='submit' name='submit' value='login' />
</form>
,然後我使用PHP登錄
<?php
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = sha1($_POST['password']);
$authorize = $login_object->login($username, $password);
}
?>
,並在幕後,$login_object
需要與數據庫進行驗證,並返回真/假的照顧。 (我做了這個對象,我有真正的,有用的對象來做到這一點)
但這意味着POST request
中的密碼傳播了原始,未散列和不安全!任何人都可以截獲真正的密碼!
所以我在想的是我應該使用JavaScript來散發密碼發送之前。我將有一個隱藏字段<input type='hidden' name='real_password' value='' />
,並且將javaScript複製輸入密碼的值,對其進行散列,將其放入real_password隱藏輸入中並將密碼字段留空。這樣,POST request
將具有哈希密碼,而不是原始的,不安全的原始密碼。
我說得對,或者我應該在PHP上做哈希?
如果使用Javascript對散列密碼進行登錄,則登錄所需的實際密碼將成爲散列密碼,該密碼仍然會通過原始和未加密的線路傳播。要安全地將用戶瀏覽器的密碼傳輸到服務器,您需要使用SSL。 – Kelvin
只需使用SSL ....您還應該查看[password_compat](https:// github。com/ircmaxell/password_compat)一種簡單而有效的密碼哈希方法 – Baba
使用HTTPS而不是HTTP。 – nickhar