網站如何設計使用者密碼重設功能

來源:互聯網
上載者:User

  因為要做一個帶有會員系統功能,本人需要設定的是使用者註冊如果忘記密碼就需要重設定密碼了,那麼要如何設計密碼重設功能?怎麼做才合理呢,下面我們一起來看看。

  使用者流程:

  1.使用者忘記密碼,來到密碼重設介面

  2.使用者輸入Email地址,點擊重設密碼按鈕

  3.使用者收到一封密碼重設郵件,裡面有重設密碼的連結,此連結有到期時間

  4.使用者點選連結,來到密碼重設頁面,輸入新密碼,完成

  這個流程並沒有什麼創新,很多網站都是用這套流程

  後端實現方式:

  1.當使用者輸入Email地址後,驗證這個Email,如果存在於資料庫,那麼取得使用者的user_id

  2.將user_id和目前時間戳編碼成HASH,需要提前準備好一個KEY,並且這個KEY只存在伺服器上。 HASH = md5 ( user_id + timestamp + KEY )

  3.產生一個URL,並且附帶剛剛產生的HASH和使用者id以及timestamp,比如 http://domain.com/reset-password.php?hash=HASH&user_id=123×tamp=1392121211

  4.當-三-聯-使用者訪問這個URL, 檢查HASH是否合法: HASH == MD5 ( user_id + timestamp + KEY)

  5.檢查 timestamp 是不是到期了

  6.如果所有檢查通過,那麼顯示一個新密碼錶單給使用者

  這種方式的好處:

  1.不需要額外的資料表

  2.不用擔心參數被使用者惡意修改,因為要檢查hash是不是等於那幾個參數的md5

  3.密碼重設URL內建時間戳記

  4.只要KEY設定的足夠長足夠複雜,那麼可以認為HASH是絕對安全的

  例

  send-reset-email.php:

 代碼如下 複製代碼


$KEY = "something really long long long long long and secret";
$email = $_POST['email'];
$user = get_user_by_email($email);
if ($user && $user['id'])
{
    $time = time();
    $hash = md5( $user['id'] . $time . $KEY);
    $url = "http://domain.com/reset-password-form.php?id=".$user['id'].'&timestamp='.$time.'&hash='.$hash;
    send_email($email, 'reset password email from xxx.com', ' Please click the following link to reset password'. $url);
}

  reset-password-form.php:

 代碼如下 複製代碼


$KEY = "something really long long long long long and secret";
$hash = $_GET['hash'];
$user_id = $_GET['id'];
$timestamp = $_GET['timestamp'];

if ($hash == md5( $user_id . $timestamp . $KEY ))
{
    if ( time() - $timestamp > 3600 ) // one hour
    {
        die('link expired');
    }
}
else
{
    die('invalid parameters');
}

//validation passed

if ($_POST['new_password'])
{
    reset_user_password($user_id, $_POST['new_password']);
    die(' password changed successfully ');
}
else
{
    echo '
        <form action="reset-password-form.php?hash=$hash&id=$user_id&timestamp=$timestamp" method="post">
            new password: <input type="password" name="new_password">

            <input type="submit" value="submit">
        </form>
    ';
}

相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。