За последние 24 часа нас посетили 53399 программистов и 1719 роботов. Сейчас ищут 879 программистов ...

Неверный пароль

Тема в разделе "PHP и базы данных", создана пользователем S.I.G, 19 авг 2016.

  1. S.I.G

    S.I.G Новичок

    С нами с:
    19 апр 2016
    Сообщения:
    86
    Симпатии:
    0
    Добрый вечер, столкнулся с такой проблемой, что при вводе на сайте правильного пароля, он пишет, что пароль неверный. К примеру, логин такой то, пароль 123456, нажимаю Войти и пишет, что пароль неверный, хотя даже расшифровка мд5 показывает, что это пароль 123456 и что хэш верный. Началось это после переезда на новую базу данных с другими названиями столбцов, но они все подправлены, а пароль всё равно неверный.

    Имя столбца пароля в базе - pPassword. Раньше было Key.
    Сервера два, базы разные, второй не волнует, там всё в порядке.
    Хэш пароля: e10adc3949ba59abbe56e057f20f883e
    Что может работать не так? Почему он не распознает пароль?
    Часть кода:
    PHP:
    1. <?php
    2. class Accounts
    3. {
    4.     private $db;
    5.     private $db2;
    6.     public $error;
    7.     public $getData;
    8.  
    9.     public function __construct()
    10.     {
    11.         try {
    12.             $this->db = Database::loadserver1();
    13.             $this->db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    14.             $this->db->exec("set names utf8");
    15.         }
    16.         catch(PDOException $e) {
    17.             $today = getdate();
    18.             $today = '\n'.$today["hours"].':'.$today["minutes"].':'.$today["seconds"].' - '.$today["mday"].'-'.$today["mon"].'-'.$today["year"];
    19.             file_put_contents('PDOErrors.txt', $today , FILE_APPEND);
    20.             file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
    21.             die();
    22.         }
    23.         try {
    24.             $this->db2 = Database::loadserver2();
    25.             $this->db2->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    26.             $this->db2->exec("set names utf8");
    27.         }
    28.         catch(PDOException $e) {
    29.             $today = getdate();
    30.             $today = '\n'.$today["hours"].':'.$today["minutes"].':'.$today["seconds"].' - '.$today["mday"].'-'.$today["mon"].'-'.$today["year"];
    31.             file_put_contents('PDOErrors.txt', $today , FILE_APPEND);
    32.             file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
    33.             die();
    34.         }
    35.     }
    36.     public function login(){
    37.  
    38.         if (isset($_SESSION['statusLogin'])) {if ($_SESSION['statusLogin'] == 'true') { header("Location: /profile/");die;} else {$_SESSION['statusLogin'] = 'false';}} else { $_SESSION['statusLogin'] = 'false'; }
    39.  
    40.  
    41.         if (isset($_POST['auth_login'])) {
    42.             $server = $_POST['auth_server'];
    43.             $login = $_POST['auth_login'];
    44.             $pass = $_POST['auth_pass'];
    45.             $check = md5($pass);
    46.             $password = mb_strtoupper($check);
    47.  
    48.             // Сервер 1
    49.  
    50.             if($server == 1)
    51.             {  
    52.                 $dbz = $this->db->prepare("SELECT * FROM `Accounts` WHERE `Name` = :login");
    53.                 $dbz->bindParam(':login', $login, PDO::PARAM_STR);
    54.                 $dbz->execute();
    55.  
    56.                 $this->getData = $dbz->fetch(PDO::FETCH_ASSOC);
    57.                 if (!$this->getData) { $this->error = "Аккаунт не найден на сервере №1"; }
    58.                 else
    59.                 {
    60.                 if ($this->getData['pPassword'] == $password)
    61.                 {
    62.                     $_SESSION['authLogin'] = $login;
    63.                     $_SESSION['statusLogin'] = 'true';
    64.                     $_SESSION['statusServer'] = 1;
    65.                     header("Location: /profile/");
    66.                     die;
    67.                 }
    68.                 else
    69.                 { $this->error = "Неверный пароль. "; }
    70.                 }
    71.             }
    72.             if($server == 2)
    73.             {  
    74.                 $dbz = $this->db2->prepare("SELECT * FROM `accounts` WHERE `NickName` = :login");
    75.                 $dbz->bindParam(':login', $login, PDO::PARAM_STR);
    76.                 $dbz->execute();
    77.  
    78.                 $this->getData = $dbz->fetch(PDO::FETCH_ASSOC);
    79.                 if (!$this->getData) { $this->error = "Аккаунт не найден на сервере №2"; }
    80.                 else {
    81.                     if ($this->getData['Key'] == $password)
    82.                     {
    83.                         $_SESSION['authLogin'] = $login;
    84.                         $_SESSION['statusLogin'] = 'true';
    85.                         $_SESSION['statusServer'] = 2;
    86.                         header("Location: /profile/");
    87.                         die;
    88.                     } else { $this->error = "Неверный пароль."; }
    89.                 }
    90.             }
    91.  
    92.         }
    93.         View::render('login', array (
    94.         'pageTitle' => 'Авторизация',
    95.         'authStatus' => $_SESSION['statusLogin'],
    96.         'error' => $this->error
    97.         ));
    98.     }
    99.  
    100.     public function profile(){
    101.     if (isset($_SESSION['statusLogin'])) { if ($_SESSION['statusLogin'] == 'false') {  header("Location: /login/"); die; } } else {  header("Location: /login/"); die; }
    102.  
    103.     $login = $_SESSION['authLogin'];
    104.     $server = $_SESSION['statusServer'];
    105.     $usluga = $_POST['usluga'];
     
    #1 S.I.G, 19 авг 2016
    Последнее редактирование модератором: 21 авг 2016
  2. S.I.G

    S.I.G Новичок

    С нами с:
    19 апр 2016
    Сообщения:
    86
    Симпатии:
    0
    Заметил такой нюанс, что раньше пароли были написаны капсом, к примеру, 632F3E0A10E3A46839E2FBC1D41BF91B, а сейчас в таком виде - d8578edf8458ce06fbc5bb76a58c5ca4. Может ли это как то влиять?
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  4. S.I.G

    S.I.G Новичок

    С нами с:
    19 апр 2016
    Сообщения:
    86
    Симпатии:
    0
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Кто тогда? Проверка же в коде происходит, можешь и запросы отлаживать в базе.
    У тебя задача, которую ты можешь решить отладкой, за тебя мало кто это сделает, у них нет твоего окружения.
     
  6. S.I.G

    S.I.G Новичок

    С нами с:
    19 апр 2016
    Сообщения:
    86
    Симпатии:
    0
    Хорошо. Пойду изучать ссылки. Спасибо.
     
  7. S.I.G

    S.I.G Новичок

    С нами с:
    19 апр 2016
    Сообщения:
    86
    Симпатии:
    0
    Решение было зарыто в регистре символов, когда решил закомментировать данную команду mb_strtoupper. В базе пароли записаны маленькими буквами, а эта команда делает их большими и после уже сравнивает с базой, поэтому и писало, что пароль неверный.
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @S.I.G вот и отлично, сам справился
     
    S.I.G нравится это.
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Чувак, если ты осилил пдо и плейсхолдеры, то осиль плс нормальный способ хеширования паролей.

    https://php.ru/manual/function.password-hash.html

    читай и делай.

    Рекомендую использовать только PASSWORD_DEFAULT