【发布时间】:2014-01-16 01:11:43
【问题描述】:
我在 php 中创建了一个 API,供用户更改他们帐户的密码,但我这样做是为了让他们通过输入电子邮件来更改它,所以我在数据库中找到了他们的列,但出于安全原因,我不这样做'认为这不是一个好主意......所以我想添加它以便它通过电子邮件找到用户然后检查他输入的旧密码是否与数据库中的加密相匹配,所以他的输入将是 1)电子邮件 2)旧通行证 3) 新通行证。我的密码是用 hash + salt 加密的
这是我的 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
}
?>
谁能给我写一个解决方案?因此它会检查数据库中的电子邮件和旧密码。
【问题讨论】:
-
如果我理解你的话,你想检查用户输入的旧密码是否正确,如果是,那么用户可以更改密码,对吧?如果是这样,那么您可以使用简单的 if 语句来完成,if(oldPass == pass) 继续
-
让他们先登录,如果他们已登录则更改密码。
Could anyone write me a solution for this?我们不是来为您编写代码,而是帮助您指明正确的方向。 -
请不要使用
mysql_*,而应使用mysqli_*。mysql_*已折旧。你也很容易被注射。请使用准备好的语句或PDO。 -
@Alen 好的,但是如何从我的表中选择 2 列然后我可以比较?
-
@Simon_says 您不需要比较两列,使用 POST['newpas'] 变量中的密码并将其与数据库中的密码进行比较
标签: php mysql database hash change-password