[英]PHP user changing password on his account via email and old password
我在php中創建了一個API,供用戶更改其帳戶密碼,但我這樣做是為了讓他們通過輸入電子郵件來更改密碼,因此我在數據庫中找到了這樣的列,但是出於安全考慮,我認為這是個好主意...所以我想添加它,以便它通過電子郵件找到用戶,然后檢查他的舊輸入密碼是否與數據庫中加密的密碼匹配,所以他的輸入將是1)電子郵件2)舊密碼3)新通行證。 我的密碼已用哈希+鹽加密
這是我的php文件
<?php
require_once('connection.php');
function forgotPassword($forgotpassword, $newpassword, $salt){
$result = mysql_query("UPDATE `member` SET `encrypted_password` = '$newpassword',`salt` = '$salt' WHERE `email` = '$forgotpassword'");
if ($result) {
return true;
}
else
{
return false;
}
}
function hashSSHA($password) {
$salt = sha1(rand());
$salt = substr($salt, 0, 10);
$encrypted = base64_encode(sha1($password . $salt, true) . $salt);
$hash = array("salt" => $salt, "encrypted" => $encrypted);
return $hash;
}
function isUserExisted($email) {
$result = mysql_query("SELECT email from member WHERE email = '$email'");
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
// user existed
return true;
} else {
// user not existed
return false;
}
}
$email = $_POST['email'];
$newpassword = $_POST['newpas'];
$hash = hashSSHA($newpassword);
$encrypted_password = $hash["encrypted"]; // encrypted password
$salt = $hash["salt"];
if (isUserExisted($email)) {
$user = forgotPassword($email, $encrypted_password, $salt);
if ($user) {
//pass changed
}
else {
//error
}
// user is already existed - error response
}
else {
//user not found
}
?>
有人可以給我寫一個解決方案嗎? 因此,它會檢查數據庫中的電子郵件和舊密碼。
聽起來像您要找的是一個簡單的密碼驗證。 在您的情況下,它看起來像:
function checkPass ($salt, $password, $storedPass){
$encrypted = base64_encode(sha1($password . $salt, true) . $salt);
if($storedPass==$encrypted){
return TRUE;
}
else{
return FALSE;
}
當然,您必須首先從數據庫中挖掘$salt
的值。
如果我理解正確,那么您正在尋找“ Forgot Password
的解決方案。 在這種情況下,明顯的情況是用戶不記得當前密碼,而是想要設置一個新密碼。
我假設您有一個“ Forgot Password
鏈接,該鏈接會轉到“ Forgot Password
頁面,在該頁面中,用戶輸入Email Address
然后單擊“下一步”。
如果您的系統已經存儲了秘密問題和答案,則可以在此處添加步驟以檢查其中至少一項,否則,請繼續進行以下操作:
Email Address
。 Email Address
,請繼續。 否則向用戶顯示消息。 Random String
。 Random String
保存在該用戶的(用戶)表中。 Link
並在其中添加Email Address
和Random String
。 Link
的電子郵件,並將其發送到Email Address
。 現在,用戶收到電子郵件並單擊Link
:
Link
以獲取Email Address
和Random String
。 Email Address
和Random String
。 Email Address
和Random String
組合,請繼續。 否則向用戶顯示消息。 New Password
。 New Password
。 現在,您可以Sign In
自動將用戶或顯示Sing In
頁面供用戶使用新的憑證登錄。
好的 ,如果用戶已經登錄並打算更改密碼:
假設您具有“ Change Password
鏈接:
當用戶單擊“ Change Password
鏈接時:
Change Password
表單。 Old Password
。 New Password
並Retype New Password
。 已經登錄的用戶,您可以使用userId或emailAddress,也可以從(user)表中檢索。
所以現在:
New Password
和“ Retype New Password
相同。 現在,如果您的系統允許多個用戶登錄同一帳戶,則明智的做法是自動注銷所有這些用戶,然后要求再次登錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.