2012-08-28 49 views
0

大家好我正在爲我的數據庫建立一個新的登錄系統,這將有望比我的舊的md5密碼加密頁面更安全.. 我只是想知道如果我可以得到一些此位的代碼我要去提示將要使用它......如果主要有anythings我能夠或應該做些什麼來改善這個部分...許多感謝的安全...關於hmac功能的提示,登錄

$sql="SELECT * FROM `users` WHERE username='$user'"; 
$result=mysql_query($sql); 


while($rows=mysql_fetch_array($result)){ 
$salt=$rows['salt']; 
$site_key=$rows['site_key']; 
} 

     function hash_password($salt,$pass,$site_key) { 
    global $site_key; 
    return hash_hmac('sha512',$pass . $salt, $site_key); 
} 
$password=hash_password(); 
$hashed= mysql_real_escape_string($password); 
+1

不要使用全局變量;此外,無論如何,hash_hmac是這項工作的錯誤工具。 –

+0

@Jack:'hash_hmac'有什麼問題? – Ryan

+1

@minitech我不是說它有什麼問題;我這樣說的原因是因爲恕我直言,它比使用bcrypt更容易比保留'$ site_key'的祕密:) –

回答

0

我希望$user已經逃脫?無論如何,切換到PDO或MySQLi而不是使用mysql_。對於散列密碼,不要只使用SHA-512或類似的東西;這些可以計算得太快。我會建議bcrypt:

function hash_password($password, $salt) { 
    return crypt($password, '$2y$11$' . $salt); 
} 
+0

使用mysqli將我需要運行一個mysqli服務器...我也unfirmillar與PDO的....是的$用戶變量被逃脫 – Matthew

+0

@Matthew時間來熟悉PDO然後,因爲'mysql_'是即將被移除。 –

+0

什麼是最好的網站開始與pdo的fimallir – Matthew

0

$sql="SELECT * FROM用戶WHERE username='$user'";這部分是開放的SQL注入。使用類似PDO或MySQLi的東西

+0

我將如何改變它mysqli ..我不是aprticluary fimallair與它 – Matthew