簡體   English   中英

每次登錄時更改數據庫中的密碼值

[英]Change password value in the database each time log in

是用戶每次登錄數據庫時更改密碼值的好方法嗎? 當用戶在系統上注冊新帳戶時,我編寫了一個哈希函數來哈希密碼。 每次用戶登錄時,數據庫中的哈希值都會更改。 是好還是壞?

如果您完全由自己設計此哈希函數,那么...這是一個非常非常糟糕的主意。 你為什么需要這樣的東西? 如果存儲鹽腌的SHA-256哈希密碼,則安全性足夠好。 您不需要重新生成密碼,它不提供任何其他安全性。 如果說您的應用易於進行SQL注入,那么該方案將無法保護您的應用。 如果您使用鹽腌和鍵控的SHA-256,則可能會更好,例如:(我不是php編碼器,我只是希望我們的應用程序是安全的)

$username = 'Admin';
$password = 'gf45_gdf#4hg';
$key = 'MySuperSecretKEY!!!!';
$salt = hash('sha256', uniqid(mt_rand(), true) . 'something random' . strtolower($username));
$hash = $salt . $password . $key;
$hash = hash('sha256', $hash);
$hash = $salt . $hash;

然后檢查:

$username = 'Admin';
$password = 'gf45_gdf#4hg';

$sql = '
  SELECT
    `hash`
  FROM `users`
    WHERE
      `username` = "' . mysql_real_escape_string($username) . '"
  LIMIT 1
  ;';

$r = mysql_fetch_assoc(mysql_query($sql));

$salt = substr($r['hash'], 0, 64);
$hash = $salt . $password . $key;
$hash = hash('sha256', $hash);
$hash = $salt . $hash;

if ( $hash == $r['hash'] ) {
  //OK
}

因此,即使攻擊者能夠欺騙他不知道的鹽析算法,還是一個密鑰,這樣他就無法在SQL-Injection攻擊中復制有效的哈希。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM