2009-08-14 15 views
0

私は新しいウェブサイトを持っています。そして、次は私のシナリオです:PHP、ログインせずにパスワードを更新しますか?

私は5人(数字ではないが重要)に電子メールを送信し、メール内に、私は彼らがクリックするためのリンクが含まれます:

www.domain.com/emailを= [email protected] & key = abc ... xyz

これらのキーは、saltとsha1を使用してランダムに生成されます。彼らの電子メールのリンクをクリックすると、私は彼らに更新プロファイルページに直接アクセスさせることができますか?それとも、もう一度ログインする必要がありますか?

私が直接更新プロファイルページにアクセスできるようにする場合、私は気にする必要があるセキュリティ対策は何ですか?私はログインの使用を知っている、セッションを保存することができますが、事は、彼らは彼らの電子メールからリンクをクリックし、私は非常にプライベートと安全だと思う。

私が考えることができる唯一のセキュリティ上の脆弱性は、ハッカーが魔法のように "キー"(約60文字)を覚えていることです。ブラウザのURL:www.domain.com/[email protected] xyz.com & key = abc ... xyz。

ハッカーがそれを行うことができれば、私は完了です。ユーザーアカウントがハッキングされます。

ハッカーがハッキングできることはありますか?プロファイルページのみを更新してください。

Btwさん、既にプロファイルを更新している場合は、データベースの「キー」を削除する必要がありますか?私はPHPとMySQLを使用しています

答えて

3

パスワードリセットのメールは1回の使用を持っている必要があります - あなたのデータベースに不透明なトークンを保存し、電子メールでそれを送る、とだけそれを一度使用することができます。

+0

プロフィールを更新する前にログインする必要がありますか?または、単に直接プロフィールを更新させることができますか? – bbtang

+0

(以前のコメントフォーム...)リンクをクリックした後に? – bbtang

+0

私は彼らがログインする必要はないと思う。トークンが使用されたら、それを削除してください/それを死んだとしてマークしてください。 –

0

私はPaulに同意しますが、プロフィールの更新についてはログイン後に行うことをお勧めします。 クライアントのパスワードをリセットしたときに、クライアントのIPアドレスを表示して記憶することもできます。

0

通常、ユーザーは「パスワードを忘れた」というメールが送信されたときにパスワードを変更してから、何かを変更する前にログインさせる必要があります。次のように

私が作成したパスワードメールの最近の実装では、働いていた:

  • は、ユーザーのID、および現在のタイムスタンプを含む配列を作成します。
  • (サーバーに格納されている対称キーを使用して)結果の文字列をシリアル化して暗号化します。
  • この暗号化された文字列をurlパラメータに入れてください(私のアドバイスは、URLに不正な文字が含まれないように、データを2度にbase64_encodeすることです)、電子メールで送信してください。
  • 電子メールのリンクをクリックすると、パラメータが正しく復号化されている(つまり有効である)ことを確認してから、データ構造を逆シリアル化します。ここで元のタイムスタンプを確認します。その時点から長すぎる場合は、忘れてしまったパスワードのURLを古すぎるとみなしてください。
  • URLが有効で最新の場合は、パスワードをリセットページに移動してください。
+0

彼らは正式に私のユーザーではありません。自分のウェブサイトを試してもらうためにデータベースから5〜10人をランダムに選択します。私のデータベースでは、パスワードを無作為に生成してログインするためのユーザー名として電子メールを使用しない限り、ユーザー名とパスワードはありません。さて、あなたのパスワード電子メールを私たちと共有していただきありがとうございます。その本当に素晴らしい。私は近い将来それを使用します:) – bbtang

関連する問題