0

уважаемые специалисты!

В коде ниже интерпретатор почему-то всегда выводит "Извините, введенный вами login или пароль невереный". Как если то, что было введено есть в базе, так и в том случае, если нет.. Не могу понять, почему так.. Буду благодарен за любую подсказку! ($connection - переменная подключения к базе, connection.php отрабатывает правильно, я проверял)..

<?php include ("connection.php");    $bin = "SELECT pass FROM auth WHERE log='$login'"; $ht = $connection->query($bin); $myrow1 = $ht->fetch_array();
    if (!empty($myrow1['password']))
    {
    //если пользователя с введенным логином не существует
    exit ("Извините, введённый вами login или пароль неверный.");
    }
    elseif ($myrow1['password']==$password) {
    $_SESSION['login']=$myrow1['login']; 
    $_SESSION['id']=$myrow1['id'];//эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь
    echo "Вы успешно вошли на сайт! <a href='index.php'>Главная страница</a>";
    }  else {
    //если пароли не сошлись

    exit ("Извините, введённый вами login или пароль неверный.");
    }
    ?>
Valentin
  • 271
  • Может у вас в БД пароли хэшированные и вам, прежде чем искать их в БД надо пришедшее от юзера также захэшировать? Или у вас таки пароли в открытом виде в БД хранятся? – ЮрийСПб Oct 18 '19 at 16:27
  • 2
    Ошибка раз — вы храните пароль в открытом виде. Ошибка два — вы подставляете логин в sql-запрос без какой-либо защиты (судя по показанному коду) и получаете sql-инъекцию, через которую хакеры взломают ваш сайт. Ошибка три — вы не знаете или забыли как работает !empty. Ошибка четыре — pass и password это совершенно не одинаковые слова. Ошибка пять и шесть — login и id из базы вы вообще не читаете. – andreymal Oct 18 '19 at 16:27
  • У меня пока ничего не хешировано, понимаю опасность, но и не выкладываю сайт в интернет пока.. Спасибо за наводку относительно empty.. заново перечитаю синтаксис.. может, в этом и есть проблема.. – Valentin Oct 18 '19 at 16:37
  • Перестаньте подставлять любые переменные в текст запросов, используйте подготавливаемые выражения и привязку значений. Без этого ваши сайты будут взламывать постоянно (80% всех взломанных сайтов из за этого) – Mike Oct 18 '19 at 17:58
  • https://ru.stackoverflow.com/questions/393450/%d0%93%d1%80%d0%b0%d0%bc%d0%be%d1%82%d0%bd%d0%b0%d1%8f-%d0%b7%d0%b0%d1%89%d0%b8%d1%82%d0%b0-%d0%be%d1%82-sql-injection – Mike Oct 18 '19 at 18:04

0 Answers0