Отсутствует проверка пароля

Я использую приведенный ниже код, он проверяет пустые поля и проверяет электронную почту, но даже если пароль правильный, он не войдет в систему. пароль был вставлен с защитой md5, ниже приведен код.

PHP:

      session_start(); 

      //Checks if there is a login cookie

      if(isset($_COOKIE['ID_my_site']))


     //if there is, it logs you in and directes you to the members page

     { 
       $email = $_COOKIE['ID_my_site']; 

        $pass = $_COOKIE['Key_my_site'];

           $check = mysql_query("SELECT * FROM accounts WHERE email = '$email'")or              die(mysql_error());

        while($info = mysql_fetch_array( $check ))  

        {

           if ($pass != $info['password']) 

                    {

                          }

           else

             {

               header("Location: home.php");



               }

            }

        }


     //if the login form is submitted 

    if (isset($_POST['submit'])) { // if form has been submitted



     // makes sure they filled it in

           if(!$_POST['email'] | !$_POST['password']) {

           die('You did not fill in a required field.');

          }

          // checks it against the database



           if (!get_magic_quotes_gpc()) {

             $_POST['email'] = addslashes($_POST['email']);

          }

          $check = mysql_query("SELECT * FROM accounts WHERE email = '".$_POST['email']."'")or die(mysql_error());



        //Gives error if user dosen't exist

     $check2 = mysql_num_rows($check);

     if ($check2 == 0) {

               die('That user does not exist in our database. <a href=add.php>Click Here to Register</a>');

            }

            while($info = mysql_fetch_array( $check ))  

        {

         $_POST['password'] = stripslashes($_POST['password']);

     $info['password'] = stripslashes($info['password']);

      $_POST['password'] = md5($_POST['password']);



     //gives error if the password is wrong

        if ($_POST['password'] != $info['password']) {

          die('Incorrect password, please try again.');

        }

         else 

        { 


              // if login is ok then we add a cookie 

           $_POST['email'] = stripslashes($_POST['email']); 

           $hour = time() + 3600; 

              setcookie(ID_my_site, $_POST['email'], $hour); 

              setcookie(Key_my_site, $_POST['password'], $hour);     



                //then redirect them to the members area 

              header("Location: home.php"); 

          } 

           } 

        } 

     else 

  {  



      // if they are not logged in 



     <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 

      <table border="0"> 

    <tr><td colspan=2><h1>Login</h1></td></tr> 

    <tr><td>email:</td><td> 

    <input type="text" name="email" maxlength="40"> 

     </td></tr> 

       <tr><td>Password:</td><td> 

    <input type="password" name="password" maxlength="50"> 

    </td></tr> 

     <tr><td colspan="2" align="right"> 

    <input type="submit" name="submit" value="Login"> 

    </td></tr> 

  </table> 

   </form> 

}

Вот регистрационный код:

PHP:

       // here we encrypt the password and add slashes if needed
        $_POST['password'] = md5($_POST['password']);
         if (!get_magic_quotes_gpc()) {
      $_POST['password'] = mysql_escape_string($_POST['password']);
     $_POST['email'] = mysql_escape_string($_POST['email']);
      $_POST['full_name'] = mysql_escape_string($_POST['full_name']);
     $_POST['user_url'] = mysql_escape_string($_POST['user_url']);
        }


        // now we insert it into the database
    $insert = "INSERT INTO accounts (Uniquer, Full_name, Email, Password, User_url)
  VALUES ('".$uniquer."','".$_POST['full_name']."', '".$_POST['email']."','".$_POST['password']."', '".$_POST['user_url']."')";
    $add_member = mysql_query($insert);

После использования функции ini_set я получил сообщение об ошибке, получаю это сообщение, но не уверен, что оно означает:

There are the lines where the errors are at: 

                if ($pass != $info['password']) 

и эта строка

                        if ($_POST['password'] != $info['password']) {

4 ответа

Решение

Я решил это, если вы заметили, что в запросах написано SELECT *, вместо этого я попытался выбрать электронную почту, пароль.

Вы пытаетесь получить доступ к полю БД с $info['password'], но поле базы данных на самом деле Password с большой буквы

Ты звонишь mysql_escape_string хранить данные в БД и вызывать stripslashes в представленной форме входа в систему. Возможно, они делают разные вещи с паролем. Еще несколько вещей для размышления:

  • Если вы используете пароль MD5 для хранения его в БД, вам не нужно звонить stripslashes или же mysql_escape_string в теме. Он уже был преобразован только в буквенно-цифровые символы.
  • mysql_escape_string устарела.
  • Вместо того, чтобы экранировать поле электронной почты, вам лучше проверить его формат.

После добавления новой регистрации вручную введите md5 используемый пароль, а затем сравните это значение со значением, сохраненным в БД. Вы можете обнаружить, что они разные.

Единственное, что я вижу, это то, что вы используете stripslashes на опубликованном пароле (не версии md5), но используйте его в версии md5 для сохраненного пароля.

Вы не должны действительно использовать stripslashes на пароль в базе данных, так как ни один пароль не должен храниться с косой чертой для начала.

Что произойдет, если вы измените:

$_POST['password'] = stripslashes($_POST['password']);
$info['password'] = stripslashes($info['password']);
$_POST['password'] = md5($_POST['password']);

Для того, чтобы:

$_POST['password'] = md5($_POST['password']);
$_POST['password'] = stripslashes($_POST['password']);
$info['password'] = stripslashes($info['password']);

Вы задали аналогичный вопрос некоторое время назад с совершенно другим кодом, так что я предполагаю, что сейчас это больше проблема с базой данных.

Ваше поле пароля допускает 32 символа для хэша md5? Слишком короткое поле пароля усекает хэш md5, поэтому всегда происходит сбой входа в систему.

Другие вопросы по тегам