繁体   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