Как правильно сделать авторизацию на php?

Пользователь

от marc_zboncak , в категории: PHP , 2 года назад

Как правильно сделать авторизацию на php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от felix , 2 года назад

@marc_zboncak 

  1. Создать форму входа с полями для ввода логина и пароля.
  2. Создать скрипт, который будет обрабатывать данные из формы.
  3. Проверить введенные логин и пароль на соответствие с данными в базе данных.
  4. Если данные верны, создать переменную сессии, в которой будет храниться информация о пользователе (id, логин и т.д.).
  5. В каждом защищенном файле проверять, что переменная сессии существует и содержит верные данные, иначе перенаправлять на страницу входа.
  6. Для выхода из авторизации необходимо уничтожить переменную сессии.


Пример кода:


Форма входа:

1
2
3
4
5
6
7
8
9
    Логин:
    
    
    Пароль:
    
    
    


Скрипт обработки входа (login.php):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
session_start();
if (!empty($_POST['login']) && !empty($_POST['password'])) {
    $login = htmlspecialchars($_POST['login']);
    $password = md5(htmlspecialchars($_POST['password']));
    
    // подключение к БД, запрос на поиск пользователя по логину и паролю
    
    if ($user) { // если пользователь найден и данные верны
        $_SESSION['user_id'] = $user['id']; // создаем переменную сессии с ID пользователя
        $_SESSION['user_login'] = $user['login']; // создаем переменную сессии с логином пользователя
        header('Location: index.php'); // перенаправляем на защищенную страницу
        exit;
    } else {
        echo 'Неверный логин или пароль';
    }
}


Защищенная страница:

1
2
3
4
5
6
7
session_start();
if (!isset($_SESSION['user_id'])) { // если переменная сессии не существует
    header('Location: login.php'); // перенаправляем на страницу входа
    exit;
}

// здесь код защищенной страницы


Выход из авторизации:

1
2
3
4
session_start();
session_destroy(); // уничтожаем переменные сессии
header('Location: login.php'); // перенаправляем на страницу входа
exit;


Пользователь

от clifford , 6 месяцев назад

@marc_zboncak 

Данный код примерно иллюстрирует процесс авторизации на PHP. Однако, его использование требует доработки и улучшения для увеличения безопасности приложения:

  1. Не рекомендуется использовать md5 для хеширования паролей, так как данный алгоритм считается устаревшим и уязвимым. Рекомендуется использовать более безопасные алгоритмы хэширования, такие как bcrypt или Argon2.
  2. Важно проводить валидацию и фильтрацию введенных данных перед сохранением их в базе данных, чтобы предотвратить атаки типа SQL-инъекций.
  3. Рекомендуется использовать подготовленные запросы или ORM для взаимодействия с базой данных, чтобы избежать уязвимостей, связанных с некорректной обработкой данных из пользовательского ввода.
  4. Проверка наличия переменной сессии и ее содержимого должна быть выполнена в каждом защищенном файле для обеспечения безопасности приложения.
  5. Реализация выхода из авторизации также должна включать дополнительные шаги, такие как очистка всех данных сессии, а не только их уничтожение.
  6. Для улучшения безопасности можно реализовать механизм защиты от перебора паролей (например, ограничение числа попыток ввода пароля).
  7. Рассмотрите возможность внедрения механизма двухфакторной аутентификации для повышения безопасности пользовательских аккаунтов.


Перечисленные выше рекомендации помогут обеспечить более высокий уровень безопасности приложения и защитить данные пользователей от возможных угроз.