我一直在使用CodeIgniter開發一個網站的登錄庫。驗證碼如下:在PHP和MySQL中醃製
function signin($username, $password)
{
$CI =& get_instance();
$query_auth=$this->db->query('SELECT user_id, banned FROM user WHERE username=? AND password=SHA1(CONCAT(?,salt)) LIMIT 1', array($username, $password));
if($query_auth->num_rows()!=1)
return 2;
else
{
if($query_init->row()->banned==1)
return 3;
else
{
$CI->load->library('session');
$this->session->set_userdata('gauid', $query_auth->row()->user_id);
return 1;
}
}
}
返回值表示成功,失敗或被禁止。每個用戶在數據庫中都有獨特的鹽。
本來我是從數據庫中攫取了鹽,將用戶輸入的密碼和salt中的鹽從PHP中的數據庫中合併,然後再用合併後的值查詢數據庫。我認爲這會加快速度,因爲只需要一次數據庫訪問並且代碼少。我也認爲這將是同樣安全,讀最頂級的效應初探這個問題 Salting my hashes with PHP and MySQL但是之後...
首先,你的DBMS(MySQL的)不 並不需要有 加密任何支持哈希值。你可以在PHP端執行所有的 ,這也是你應該做的 。
...我開始懷疑是否有安全問題,我忽視了現貨。
這段代碼實際上有什麼不對嗎?
可能重複的[安全散列和鹹的PHP密碼](http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords) – rook 2010-07-19 19:34:57
我不明白這是怎麼回事真正!這些問題是完全不同的。 – j82374823749 2010-07-19 19:44:03
然後它應該被關閉,因爲太局部。 – rook 2010-07-19 19:46:09