-1

我正在开发一个允许用户创建帐户的简单脚本。它没有什么特别之处,它要求的是用户名和密码。我遇到的唯一问题是创建一个允许用户更改密码的脚本。这是我的进步。

它说“您当前的密码不正确!”,即使密码没问题。我已经将它与同一页面上的另一个代码连接到数据库。

<?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>
4

2 回答 2

4

当您在登录时检查密码时,您是否也在做所有这些无关紧要的废话?

mysql_real_escape_string(strip_tags(stripslashes()))

因为我可以看到包含特殊字符的密码会导致问题,即强密码。我的建议是根本不要这样做,您在将输入包含在查询中之前对其进行哈希处理,因此没有机会使用此特定字段进行 SQL 注入。

其他错误:

  1. ''.$NewPassword.''相当于简单地$NewPassword
  2. 为什么?

    ?>
    <?php
    

    这将输出一个原始换行符,它将中断您的header()通话。

于 2013-02-20T21:14:53.630 回答
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("更新passwordTable SET密码='".$_NEWHASH."' WHERE 用户名='".$User."'");

于 2013-02-20T21:14:06.103 回答