Аутентификация пользователей

Reken

Подскажите пожалуйста, чем плох следующий способ аутентификации пользователей:
Пользователь через форму ввода отправляет логин и пароль (POST) в скрипт аутентификации. Скрипт через POST получает логин и пароль (пароль в md5). Выполняет сравнение логина и пароля с БД (mysql), если совпадение есть, то записывает логин в сессию и перенаправляет пользователя в личный кабинет, если совпадений нет отправляет пользователя обратно на страницу ввода логина и пароля…

Защита странички личного кабинета, выглядит так:

Код (Text):
  1. session_start();
  2. $login = $_SESSION[‘login’];
  3.  
  4. if ($login == true){
  5.  
  6. #Код личного кабинета
  7.  
  8. }else{
  9.         exit(“<p><strong>Ошибка!</strong>Вы не можете просматривать страницы портала без аутентификации!.</p>”);
  10.     }
  11.    
 

Drunkenmunky

Если у вас пользователь один или все пользователи имеют равные права, то ничем не плох.
Если же это для просмотра или правки какой-то личной информации в многопользовательской системе, то нужно еще сравнивать ID.

 

artoodetoo

Это авторизация, а не аутентификация.

Если по канонам, то надо ещё выставить статус 403.

Пользователю будет понятней если написать “у вас нет права на эту страницу” или “войдите чтобы увидеть эту страницу”.
ИЛИ сразу редиректить на страницу аутентификации, сохраняя адрес текущей страницы где-то (в сессии/в get-параметре) чтобы вернуться на неё.

 

miketomlin

Дьявол в деталях:

PHP:
  1. $login = $_SESSION[‘login’];

Обычно при использовании сессий основную авторизационную проверку делают так:

PHP:
  1. if (isset($_SESSION[‘login’])) {
 

mkramer

md5 взламывается по радужным таблицам. Сейчас в php надо использовать исключительно https://php.net/password_hash, https://php.net/password_verify

 

don.bidon

Ну, соль никто не отменял, но да, последняя пара ф-ций вкуснее.

 

musicman3

Полностью поддерживаю. Именно так и нужно. Это самый надежный на данный момент метод.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *