私はこのウェブサイトをシンプルなCMSで作成しています。ユーザーが登録すると、パスワードはMD5で暗号化されます。データベースユーザーを失うことなくハッシュを変更する
しかし、私はこの暗号化が気に入らず、すでにCMSを再構築していたので、ハッシュも変更しました。
データベースユーザーを失うことなく、別の暗号化方式でMD5を変更する方法はありますか?
私はこのウェブサイトをシンプルなCMSで作成しています。ユーザーが登録すると、パスワードはMD5で暗号化されます。データベースユーザーを失うことなくハッシュを変更する
しかし、私はこの暗号化が気に入らず、すでにCMSを再構築していたので、ハッシュも変更しました。
データベースユーザーを失うことなく、別の暗号化方式でMD5を変更する方法はありますか?
あなたは、データベースに3つの新しい列を追加することができます。
newPassword
、newSalt
、isRequired
ここ
これはハッシュの更新以来の最初のログインの試みである場合は(password_hash PHPSのようなハッシング使用している場合)、新しいハッシュされたパスワードを新しいパスワードによって作成された新しい塩を保存することができ。
方法
あなたはisRequired
がYESであるかどうかを確認するためにログインスクリプトを変更する必要があります。古いハッシュされたパスワードと古い塩を引き出す場合は、新しいパスワードと新しい塩を使用します。
現在のユーザであれば、isRequired
をYESに設定してください。
ユーザーのログイン時に、isRequired
の値がYESの場合は、ユーザーをパスワードリセットページにリダイレクトします。それ以外の場合は、通常どおりに続行します。
このパスワードリセットページは基本的に新しい登録ページですが、現在のユーザー用に変更されているため、データの取り扱い方法に応じて新しいユーザー名などを作成する必要はありません。
ユーザーが自分のパスワードをリセットします
が、これは、新しいユーザーのために..新しい方法でハッシュされ、「新しい」セクションに通常通りデータベースに格納され、NOにisRequired
値を設定します登録ページがパスワードをnewPassword
列に入れて、isRequired
をNOにしてください。すべてisRequired
値がNOのときライン
ダウン
は最終的に、あなたはそれ以上使用されていないすべての古い列を削除するには、データベースやコーディングを更新することはできない、などのMD5ハッシュに関連するすべてのコードを削除
まだ古いパスワードを変更していないユーザーがいる場合は、そのユーザーを削除して再登録することができます。おそらく、すべてのユーザーに電子メールを送信して、x日前にパスワードを更新していないと、データが削除され、登録を再度行わなければならないと言っています。
あなたは本当にパスワードハッシュに自分の塩を使うべきではありません。本当にPHPの[組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)を使ってパスワードセキュリティを処理するべきです。ハッシュする前に[パスワードをエスケープしない](http://codereview.stackexchange.com/questions/79668/login-with-password-hash)か、他のクレンジングメカニズムを使用していることを確認してください。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –
@JayBlanchard私が自分のsaltと言うとき、私は '$ random_salt = mcrypt_create_iv(24、MCRYPT_DEV_URANDOM); 'のようなものを作成することを意味します。 – Matt
PHP関数にはランダムな塩生成器が組み込まれており、追加のコードがあります。 –
MD5
は暗号化ではなくハッシュです。それはデータ全体を保持しません - データの識別子のように機能します。だから、それは解読できません。したがって、基本的に、既存のユーザーのパスワードを自分の暗号化に変更することはできません。研究のため
より:パスワードが保存されている場所
古いメソッドと新しいハッシュを持つ2つのカラムを使用すると、すべてのユーザが新しいメソッドで再びうっとりすることがあります。 –
https://paragonie.com/blog/2016/02/how-safely-store-password-in-2016-ハッシュの更新に関する最後のセクションがあります。 – iainn
パスワードリセット機能がある場合。すべてのユーザーに新しいハッシング方法でパスワードをリセットするよう依頼する – Matt