我正在开发一个允许用户创建帐户的简单脚本。没有什么特别之处,它要求的是用户名和密码。我遇到的唯一问题是创建一个允许用户更改密码的脚本。这是我的进步。
它说“你当前的密码不对!”,即使密码很好。我已经让它用同一页面上的另一个代码连接到数据库。
<?php
$CurrentPassword = mysql_real_escape_string(strip_tags(stripslashes($_POST['CurrentPassword'])));
$NewPassword = mysql_real_escape_string(strip_tags(stripslashes($_POST['NewPassword'])));
$ConfirmNewPassword = mysql_real_escape_string(strip_tags(stripslashes($_POST['ConfirmNewPassword'])));
$Submit2 = mysql_real_escape_string(strip_tags(stripslashes($_POST['Submit2'])));
?>
<?php
if ($Submit2) {
$_OLDHASH = hash('sha512',''.$CurrentPassword.'');
$_NEWHASH = hash('sha512',''.$NewPassword.'');
$_CONFIRMNEWHASH = hash('sha512',''.$ConfirmNewPassword.'');
if ($myU->Password == $_OLDHASH) {
if ($_NEWHASH == $_CONFIRMNEWHASH) {
mysql_query("UPDATE Password='".$_NEWHASH."' WHERE Username='".$User."'");
session_destroy();
header("Location: index.php");
}
else {
echo "Your new password and new confirm password does not match!";
}
}
else {
echo "Your current password is not right!";
}
}
?>
<form action='' method='POST'>
<br />
Update Password
<br />
<input placeholder='Current Password' type='password' name='CurrentPassword'>
<br />
<input placeholder='New Password' type='password' name='NewPassword'>
<br />
<input placeholder='Confirm New Password' type='password' name='ConfirmNewPassword'>
<br />
<input type='submit' value='Change' name='Submit2'><br />
</form>
答案 0 :(得分:4)
当您在登录时检查密码时,您是否也在做所有这些无关紧要的垃圾?
mysql_real_escape_string(strip_tags(stripslashes()))
因为我可以看到导致包含特殊字符的密码问题,即:强密码。我的建议是不要这样做,你在将输入包含在查询中之前对输入进行哈希处理,因此没有机会使用此特定字段注入SQL。
其他错误:
''.$NewPassword.''
仅相当于$NewPassword
为什么?
?>
<?php
这将输出原始换行符,这将打破您的header()
来电。
答案 1 :(得分:2)
尝试制作两个文件:
changePass.html:
<form action='changePass.php' method='POST'>
<br />
Update Password
<br />
<input placeholder='Current Password' type='password' name='CurrentPassword'>
<br />
<input placeholder='New Password' type='password' name='NewPassword'>
<br />
<input placeholder='Confirm New Password' type='password' name='ConfirmNewPassword'>
<br />
<input type='submit' value='Change' name='Submit2'><br />
</form>
和第二个copyPass.php:
<?php
// Copy your php code here
?>
因此,当用户想要更改密码时,请将他指向changePass.html,当他输入表单时,数据将被传输并处理为changePass.php。请注意,在表单标签/操作参数中添加了changePass.php作为将处理数据的网页。
现在我也注意到SQL查询中的语法错误,你应该写一些类似的东西:
mysql_query(“UPDATE passwordTable
SET
Password ='”。$ _ NEWHASH。“'WHERE Username ='”。$ User。“'”);