0

ユーザーがデータベースにログインするたびにパスワードの値を変更するのは良い方法ですか? ユーザーがシステムに新しいアカウントを登録するときにパスワードをハッシュするハッシュ関数を作成しました。ユーザーがログインするたびに、データベース内のハッシュ値が変更されます。それは良いですか悪いですか?

4

1 に答える 1

1

このハッシュ関数をすべて自分で設計した場合... それは非常に悪い考えです。なぜこのようなものが必要なのですか?ソルト化された SHA-256 ハッシュ化パスワードを保存する場合、セキュリティは十分です。パスワードを再生成する必要はありません。追加のセキュリティは提供されません。アプリが SQL インジェクションを起こしやすいとしましょう。このスキームはアプリを保護しません。次のように、salted および keyed 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 インジェクション攻撃で有効なハッシュを再現することはできません。

于 2012-12-04T17:27:57.277 に答える