php - 向哈希添加盐后无法使登录脚本工作;之前工作得很好

标签 php mysql database hash salt

我已经重置了我的数据库,在注册时,我们在哈希中添加了随机盐,注册脚本运行良好,我们可以创建帐户和使用相同密码但它们具有不同哈希的帐户,但我们的登录脚本已损坏,没有登录用户,说他们的密码不正确。

不知道为什么 - 我们花了最后 2 个小时试图修复它。我们使用了 PHP 错误检查器(https://phpcodechecker.com/),没有任何错误。

我们正在运行旧版本的 PHP(5.6) 和 MySQL,目前无法更改。

    <?php
    ob_start();
    session_start();
    require_once 'dbconnect.php';

    // it will never let you open index(login) page if session is set
    if ( isset($_SESSION['user'])!="" ) {
     header("Location: index.php");
     exit;
    }

    $error = false;

    if( isset($_POST['btn-login']) ) { 

     // prevent sql injections/ clear user invalid inputs
     $email = trim($_POST['email']);
     $email = strip_tags($email);
     $email = htmlspecialchars($email);

     $name = trim($_POST['name']);
     $name = strip_tags($name);
     $name = htmlspecialchars($name);


     $pass = trim($_POST['pass']);
     $pass = strip_tags($pass);
     $pass = htmlspecialchars($pass);
     // prevent sql injections / clear user invalid inputs

     if(empty($name)){
      $error = true;
      $nameError = "Please enter your username.";
     }

     if(empty($pass)){
      $error = true;
      $passError = "Please enter your password.";
     }
       $res=mysql_query("SELECT userId, userEmail, userPass, userSalt, userSalt2 FROM users WHERE userName='$name'");
      $row=mysql_fetch_array($res);



      $row['userSalt']=$salt1;
      $row['userSalt2']=$salt2;
     // if there's no error, continue to login
     if (!$error) {

        $passwordHash = hash('sha256', $salt1 . $password . $salt2); // password hashing using SHA256

      //$res=mysql_query("SELECT userId, userEmail, userPass, userSalt,        userSalt2 FROM users WHERE userName='$name'");
      //$row=mysql_fetch_array($res); 
      $count = mysql_num_rows($res); // if email/pass correct it returns must be 1        row

      if( $count == 1 && $row['userPass']==$passwordHash ) {
       $_SESSION['user'] = $row['userId'];
header("Location: dashboard.php");
      } else {
       $errMSG = "Incorrect Credentials, Try again...";
      }

     }

    }
   ?>
   <!DOCTYPE html>
   <html>
   <head>
   <script src="//code.jquery.com/jquery-1.10.2.js"></script>
   <script>
   $(function(){
        $("#overallhead").load("overall_header.php"); 
        $("#overallfoot").load("overall_footer.html"); 
    });
   </script>
   <style>
   body {
    color: Thistle;
    }
    </style>
   <div id="overallhead"></div>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <title>Creature Paradise</title>
   <link rel="stylesheet" href="assets/css/bootstrap.min.css" type="text/css"  />
   <link rel="stylesheet" href="style.css" type="text/css" />
   </head>
   <body>

   <div class="container">

    <div id="login-form">
       <form method="post" action="<?php echo        htmlspecialchars($_SERVER['PHP_SELF']); ?>" autocomplete="off">

 <div class="col-md-12">

     <div class="form-group">
         <h2 class="">Login</h2>
        </div>

     <div class="form-group">
         <hr />
         </div>

        <?php
      if ( isset($errMSG) ) {

       ?>
       <div class="form-group">
         <div class="alert alert-danger">
       <span class="glyphicon glyphicon-info-sign"></span> <?php echo $errMSG; ?>
            </div>
         </div>
            <?php
      }
      ?> 

        <div class="form-group">
         <div class="input-group">
            <span class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span></span>
         <input type="name" name="name" class="form-control" placeholder="Your Username" value="<?php echo $name; ?>" maxlength="40" />
            </div>
            <span class="text-danger"><?php echo $nameError; ?></span>
        </div>

        <div class="form-group">
         <div class="input-group">
            <span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
         <input type="password" name="pass" class="form-control" placeholder="Your Password" maxlength="15" />
            </div>
            <span class="text-danger"><?php echo $passError; ?></span>
        </div>

        <div class="form-group">
         <hr />
        </div>

        <div class="form-group">
         <button type="submit" class="btn btn-block btn-primary" name="btn-login">Sign In</button>
        </div>

        <div class="form-group">
         <hr />
        </div>

        <div class="form-group">
                <a href="register.php">Don't have an account? Sign up here!              </a>
               </div>

           </div>

       </form>
       </div> 

   </div>
   <div id="overallfoot"></div>
   </body>
   </html>
   <?php ob_end_flush(); ?>

最佳答案

你也对注册页面进行哈希处理了吗?因为 $row['userPass'] 永远不会等于 $passwordHash 如果你还没有注册一个应用了新哈希的新帐户

关于php - 向哈希添加盐后无法使登录脚本工作;之前工作得很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44916236/

相关文章:

php - MySQL查询LIKE出错

sql-server - 了解 SQL Server 中的 COMPATIBILITY_LEVEL

android - SQLiteOpenHelper onUpgrade() 混淆Android

php - 我可以使用 Zend_Db_Select 重写它吗?

php - Drupal 6 表单通过数据库查询进行迭代

php - 打开一个 MySQL 连接与打开和关闭大量连接?

mysql - SQL:设置 AVG() 时上一列为空

php - 重定向后丢失 session 变量

php - 如何将json数据保存到mysql?

php - "write failed: No space left on device"是什么意思?