2012-12-30 108 views
0

我正在對我的登錄邏輯進行安全審計,並試圖找出哪個密碼檢查更安全,算法更好。下面是這兩種方法在僞PHP代碼:PHP登錄頁面安全審計

方法一:

$bcrypt = new Bcrypt(); 
$password_hash = $bcrypt->hash($_POST['password']); 
$result = mysqli_query_check_login($username, $password_hash); 

if(mysqli_numb_rows($result) > 0) { 
    //is valid 
} 

方法二:

$bcrypt = new Bcrypt(); 
$result = mysqli_query_check_login($username); 

//Note $result->password is a bcrypt hash 
if($bcrypt->verify($_POST['password'], $result->password)) { 
    //is valid 
} 

不同的是method I運行bcrypt哈希值,然後發送用戶名和散列密碼mysql查詢。 Method II僅通過用戶名從mysql獲取散列密碼,然後在PHP中比較這兩個值。

有沒有安全差異?

謝謝。

回答

4

這些實際上是相同的東西。使用這兩種方法應該沒有安全隱患。

1
  1. Method II可能會更簡單地獲取用戶的信息並更新像「失敗的登錄嘗試」計數器。我見過的大多數實現Method I僅僅依靠WHERE user=$login AND password=$password如果密碼不匹配,則不會選擇用戶。