0

私はPHPが初めてで、これまでにログイン、登録、および現在ユーザーがMySQLテーブルからパスワードを送信されている忘れたパスワードを作成しました。sha1 を使用してパスワードを暗号化しました。私は現在コードを書いているので:

ユーザーがパスワードを忘れた場合のリンクをクリックすると、ユーザー名と電子メール アドレス (検証済み) を入力します。

私は現在、送信された電子メールでURLリンクを送信して、リセットするページに誘導するのが難しいと感じています.

どんな助けでも大歓迎です(コードスニペット、チュートリアル、メソッドへのリンクなど)。

4

1 に答える 1

5
  1. ユーザーのパスワードの (ソルト化されていない) ハッシュを保存することさえすべきではありません: 最初にランダムな文字列 (「ソルト」) を生成し、それをパスワードと連結し、結果をハッシュ (SHA1 または好みのアルゴリズムを使用) して保存する必要があります。データベースのハッシュとソルトの両方。これにより、攻撃者がデータベース内のハッシュにアクセスした場合に、事前計算された辞書 (「レインボー テーブル」) 攻撃を無効にします。

  2. これを行った後は、パスワード リセット用の一時トークンをデータベースに保存しないでください。攻撃者がユーザー テーブルにアクセスした場合、攻撃者は単に「パスワードを忘れました」フォームに記入し、生成された電子メールを表示せずにそのユーザーのパスワードをリセットするためです。そのため、トークンは「同等のパスワード」として知られており、パスワード自体とまったく同じ方法 (ソルトとハッシュ) で保護する必要があります。

  3. リセット トークンのソルト ハッシュを保存したら、URL のクエリ文字列にユーザーの ID とリセット トークンを含むリンクをユーザーに送信できますhttp://www.example.com/resetpassword.php?user=235747&token=347659864124567532256

  4. そのリンクをたどると、提供されたユーザーとトークンが PHP スクリプトで$_GET['user']およびとして利用できるようになります$_GET['token']。次に、データベースからソルトを取得し、提供されたトークンと連結し、予想されるハッシュを計算して、データベース レコード内のハッシュと比較できます。それらが一致する場合、送信した電子メールをユーザーが受信したことを確信でき、希望する新しいパスワードの入力を求めることができます。

于 2012-07-31T16:01:32.853 に答える