За последние 24 часа нас посетили 69476 программистов и 5456 роботов. Сейчас ищут 1956 программистов ...

Аутентификация через mysql

Тема в разделе "PHP для новичков", создана пользователем 25517, 5 ноя 2018.

  1. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Пофиг. Точно так же можно сравнивать хэши.
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @miketomlin ну так поиск будет только по логину если делать правильно так как хэш с пароля мы не знаем. Я о том что код в любом случаи Г вот будет проект приносить лям тогда можно и на самопис переходить а в остальных случаях лучше готовый фреймворк.
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    @nospiou, получи хэш с введенного пароля по тому же самому правилу, по которому были получены хэши паролей в БД, и можешь сравнивать. Добавлять ли такое сравнение в запрос или выносить за его пределы – не так важно.

    Вы сами в праве решать, что вам лучше. Мне часто хватает собственных заготовок или заготовок тех, для кого я пишу. Если у вас в распоряжении нет ничего подобного, используйте сторонние решения. У нас с этим оч. строго. Прежде чем что-то новое прикрутить со стороны, это что-то должно быть тщательно проверено.
     
    #28 miketomlin, 6 ноя 2018
    Последнее редактирование: 6 ноя 2018
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Это что то на подобии md5? Так никто уже не делает. Хэш содержит в себе соль. Что бы сравнить пароли нужно сначала получить хэш
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    @nospiou, только не надо мне рассказывать про всем известные бредоф-ции password_*. В них соль и проч. могут задаваться явно, иначе браться непосредственно из «хэша».

    Mля, говорю же, хэши сравнивайте, в чистом виде или вместе со всей идентичной матней, кот. к ним прилагается при использовании известной ф-ции.
    --- Добавлено ---
    P.S. Если плохо спится, когда не поюзаешь passwоrd_verify, можешь и вынести это сравнение из запроса – дело десятое.
    --- Добавлено ---
    P.P.S. Если соль и т.п. используются случайные и хранятся вместе с хэшем, выносите сравнение.
     
  6. 25517

    25517 Новичок

    С нами с:
    27 май 2018
    Сообщения:
    12
    Симпатии:
    2
    @MouseZver ,именно поэтому я создал тему,потому что была непонятна логика (=
    Я знаю,что зло. Но мне
    , а если непонятна логика,то зачем лишнее писать? (=
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    В вашем последнем фрагменте кода логики несильно прибавилось. Хде проверка входных данных, о кот. я писал? Хде проверка результатов? – нужно делать проверку и результата выполнения запроса, и наличия строки в выборке.
     
    25517 нравится это.
  8. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.897
    Симпатии:
    718
    Будет неплохо указать, что при явном задании солей, ни в коем случае нельзя задавать одну и ту же соль на все пароли.
     
  9. GoSou

    GoSou Новичок

    С нами с:
    6 май 2017
    Сообщения:
    37
    Симпатии:
    3
    А вот и нет. Если прочтённых книг на рабочем столе 0%, это как раз и есть очень даже смешно – накой хрен её вообще приобретали?
    Предполагается, что на рабочем столе книги прочитаны и теперь служат справочным руководством в работе над сайтом. Может, у Вас иначе и прочтённые книги 100% – Вы это считаете ROFL?
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.840
    Симпатии:
    1.338
    Адрес:
    Лень
    Ну поговори мне про книгу приобретенную. Интересно будет наблюдать стороннюю, абсурдную Вангу.:)
    php net and google который ссылает по большому счету на сообщество программистов stackoverflow. Руководство хватает. Лично мне.
    Все меня раскусили, теперь я вынужден немедленно удалиться с этого форума.
     
  11. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    А мне только одна тема заходишь. Сначала смотришь видео (udemy etc) что бы понять зачем тебе это и где это можно применить потом читаешь документацию что бы узнать о мелочах. Ну а дальше гугл. Книги они все старые. Их сейчас практически никто не пишет
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    @Valick
    ты неправильно понял
    ты можешь оставаться при своём мнении, но без демагогии
    демагогию нельзя ни при каком мнении =)
    не про мнение разговор, а про твои демагогические замашки.
    кстати попытка подменить тему и выставить себя жертвой - тоже на грани фола.
     
  13. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.907
    Симпатии:
    327
    @25517, раз уж книжки тебе читать в лом, а кодить ужастно хочется, вот тут простенькая регистрация с авторизацией https://htmlweb.ru/php/example/avtorizacija2.php
    посмотри и как раз замени двойное md5 на связку password_hash и password_verify найдёшь описание этих функций на php.net
     
  14. 25517

    25517 Новичок

    С нами с:
    27 май 2018
    Сообщения:
    12
    Симпатии:
    2
    Отдаю на суд :)

    PHP:
    1. <?php
    2.  
    3. class auth
    4. {
    5.   public $username ;
    6.   public $pass ;
    7.  
    8.   function __construct($username , $pass)
    9.   {
    10.  
    11.     $connect = mysqli_connect('localhost' , 'admin_smoke' , 'Ubuntu6330' , 'admin_test') ;
    12.     if (!$connect) {
    13.       echo "Ошибка подключения базы данных";
    14.       exit();
    15.     }
    16.     $query = mysqli_query($connect , "SELECT `name` , `password` FROM `users` WHERE `name`='" . $username . "' AND `password`='" . (md5($pass) . $username) . "'  LIMIT 1");
    17.     $data = mysqli_fetch_assoc($query);
    18.  
    19.     if ($data) {
    20.       echo "Success";
    21.     }else {
    22.       echo "False";
    23.     }
    24.   }
    25. }
    26.  
    27. if (isset($_POST['log_in'])) {
    28.   $auth = new auth($_POST['login'] , $_POST['password']);
    29. }
    30.  
    31.  
    32. ?>
    33. <form  action="index.php" method="post">
    34.    <input type="text" name="login">
    35.    <input type="password" name="password">
    36.    <input type="submit" name="log_in">
    37. </form>
     
  15. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @25517 увидел класс с маленькой буквы как то печально стало дальше решил не смотреть(
     
    Shimikami и 25517 нравится это.
  16. Shimikami

    Shimikami Новичок

    С нами с:
    7 дек 2017
    Сообщения:
    4
    Симпатии:
    2
    Класс с маленькой буквы.(((
    Зачем пробел перед точкой с запятой?
    Текст можно и в одинарных здесь выводить, так как здесь просто текст.
    Дальше не стал смотреть....
     
    #41 Shimikami, 8 ноя 2018
    Последнее редактирование: 8 ноя 2018
    25517 нравится это.
  17. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    А что там делает md5? Валидировать не нужно?
    Ну даже если не закрыть глаза на все это.
    Что возле md5 делает логин?
     
    25517 и Shimikami нравится это.
  18. 25517

    25517 Новичок

    С нами с:
    27 май 2018
    Сообщения:
    12
    Симпатии:
    2
    @nospiou , валидирование - это отдельно ,пока что...
    Затем,
    PHP:
    1. if ($data) {
    2.       setcookie('my_cookie' , (md5($pass) . $username) );
    3.       header('Location:main.php') ;
    4.     }else {
    5.       echo 'False';
    6.     }
    А в main.php
    PHP:
    1. <?php
    2. require 'config.php' ;
    3. $cookie_pass = mysqli_query($connect ,"SELECT  `name` FROM `users` WHERE `password`='". $_COOKIE['my_cookie'] . "'LIMIT 1" );
    4. $cookie_check = mysqli_fetch_assoc($cookie_pass) ;
    5.  
    6. echo 'Привет ,' . $cookie_check['name'];
    7.  
    8. ?>
     
  19. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    md5 зло но не об этом. зачем ты объединяешь md5 пароля с логином? Зачем ты этот md5 суешь в куку? Почему как все нормальные люди не создашь сессию с id?
     
    25517 нравится это.
  20. 25517

    25517 Новичок

    С нами с:
    27 май 2018
    Сообщения:
    12
    Симпатии:
    2
    Если б я ещё знал как )
     
  21. Shimikami

    Shimikami Новичок

    С нами с:
    7 дек 2017
    Сообщения:
    4
    Симпатии:
    2
    Что за привычка делать пробел перед точкой с запятой?
     
    25517 нравится это.
  22. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Ну так может просто рано тебе еще самописные движки создавать? Может лучше начать с хорошо документированного фреймворка? посмотри документацию по ларке посмотри код что как и зачем сделано ну а потом если захочешь уже будешь извращаться.
    https://php.ru/manual/function.password-hash.html
    https://php.ru/manual/session.examples.basic.html
     
    25517 нравится это.
  23. 25517

    25517 Новичок

    С нами с:
    27 май 2018
    Сообщения:
    12
    Симпатии:
    2
    Так я ничего и не создаю,всё в целях понимания и изучения:)
     
  24. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @25517 ну в целях понимания твою куку с паролем которая даже не httponly утащить можно вообще без проблем
     
    25517 нравится это.
  25. 25517

    25517 Новичок

    С нами с:
    27 май 2018
    Сообщения:
    12
    Симпатии:
    2
    :)
    PHP:
    1. <?php
    2.  
    3. class auth
    4. {
    5.   public $username;
    6.   public $pass;
    7.  
    8.   function __construct($username , $pass)
    9.   {
    10.     require 'config.php' ;
    11.     $query = mysqli_query($connect , "SELECT `name` , `password` FROM `users` WHERE `name`='" . $username . "' LIMIT 1");
    12.     $data = mysqli_fetch_assoc($query);
    13.  
    14.     if (password_verify ( $pass , $data['password'] ) ) {
    15.       echo 'Sucess';
    16.     }else {
    17.       $errors = [];
    18.       if (empty($_POST['login'])) {
    19.         $errors[] = 'Введите логин';
    20.       }
    21.       if (empty($_POST['password'])) {
    22.         $errors[] = 'Введите пароль';
    23.       }
    24.       if (empty($errors)) {
    25.         echo 'Неверно введён логин или пароль!';
    26.       }else {
    27.         echo $errors['0'];
    28.       }
    29.     }
    30.   }
    31. }
    32.  
    33. if (isset($_POST['log_in'])) {
    34.   $auth = new auth($_POST['login'] , $_POST['password']);
    35.  
    36. }
    37. ?>
    38.              <form action="" method="post">
    39.  
    40.                <input type="text" class="input" name="login" placeholder="Логин" >
    41.  
    42.                <input type="password" name="password" class="input" placeholder="Пароль">
    43.  
    44.                <input type="submit" name="log_in" class="input-button" value="Войти">
    45.              </form>
    46.              <hr>