2011-01-31 3 views
3

パスワードを忘れたときにパスワードをリセットするようにメールを送信したいと思います。私はこれが議論の余地があり、いくつかの良いオプション/提案/方法/記事を探していたことを知っています。ユーザーにパスワードをリセットする良いオプションを探してください

私はこれをやってPHPの部分との単純なスクリプトでリンク「パスワードを忘れてしまった」押すようにユーザに促すよ:

$Email = $_POST['email']; 
$success = false; 
$formError = false; 

if(isset($_POST['sub_forgot_pw'])) { 

    if(empty($_POST['email'])) { 
     $formError = "true"; 
     $error = "Please enter your e-mail address."; 
    }else{ 
     $to = $Email; 
     $subject = "Password Help"; 
     $message = "To reset your password, please <a href='http://www.blahblahblah.org'>Click here</a><br /><br />Do LIFE,<br /> The Team"; 
     $from = "CysticLife <[email protected]>"; 
     $headers = 'MIME-Version: 1.0' . "\n"; 
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; 
     $headers .= "From: $from"; 
     if(mail($to, $subject, $message, $headers));{ 
      $success = "true"; 
     } 


    } 

} 
+3

私の意見では、パスワードを保存しないでください。ユーザーはサービスを使用するには別のアカウントを作成する必要はありません。私は、この単純なopenidヘルパーライブラリ(LightOpenIDとopenid-selectorを使用しています)を作成しました。 => https://github.com/alfredwesterveld/php-openid – Alfred

+0

ちょっとしたメモです。このクエリ 'SELECT * FROM' Users' WHERE 'Status' = 'active''は私にとって間違っています。少なくとも1つの状態が欠けている。 'SELECT * FROM'のようなものでなければなりませんWHERE 'Status' = 'active' AND email = '$ email'' –

+0

これは本当に素晴らしいですが、私のサイトには約3500人のメンバーがいます。スムーズな移行を把握するだけです。 – LightningWrist

答えて

11

は、ここで私は何をすべきかです:

私はテーブルをreset_passwordています。誰かがリセットを要求すると、通常、「パスワードを忘れました」というサイトのリンクをクリックして、登録した電子メールを入力し、システムからリンクが送信されます。 もちろん、ユーザーが登録されているかどうかを調べることから始めます。 email = $ _POST ['email']のユーザーから選択してください。それらが存在する場合は は、

$token = md5($_POST['email'].time()); 

のように、ランダムに生成されたトークンを作る。しかしBUH BUHは以下のコメントで表現されるように、あなたのトークンを生成するために少し何かを明らかに使用することもできます。もしあなたが好きなら、crypt()は塩のパターンを受け入れることができます。

reset_passwordテーブルの要求(Eメールおよびトークン)を挿入し、その後、あなたが取るそのファイルにその後

http://www.domain.com/resetpassword.php?token=<?php echo $token; ?> 

のようにそれらにリンクを送信$ _GET [「トークン」]とクロスでそれを参照reset_passwordテーブルトークンが有効な場合は、新しいパスワードを要求するフォームを提示します。 送信時に、そのトークンに関連する電子メールアドレスを持つユーザーを選択し、ユーザーテーブルを更新します。

+0

少なくとも私にとっては$ token = md5($ _ POST ['email']。time());よりよく働いています。変数のトークンは、指定された電子メールアドレスにのみ依存していました。 – Leandro

+3

(元々は匿名ユーザーが投稿しました):このアドバイスは使用しないでください。非常に安全です。あなたのサイトのパスワードをリセットするために誰かがやり直さなければならないことは、リセットされた空白に誰かの電子メールを入力して、腕時計を見てから、同じトークンを作ります。誰でも秒までの時間を知ることができ、誰もが同じMD5をとることができます。 –

+0

真実ですが、正確でなければならず、また、これは間違いなく使用された方法であることを知る必要があります。ハッキングに少しの努力を加えても解読が難しくないかもしれません。しかし、URLを見るだけで簡単には識別できないトークンルールを作成する限り、一般的な概念は特に安全ではありません。 –

1

ネットワークを盗聴する人には、URLを失う危険があります。これを避けるには、vX4dqなどのランダムなショートキーを生成してデータベースに保存します。ユーザーにこれを覚えてもらいます。ユーザーがリンクを介してリセットされたときは、知っているだけのこのキーを入力するように頼んでください。

アドバンス: - このキーをキャプチャで表示して、盗聴されないようにすることができます。

関連する問題