«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как безопасно реализовать систему входа на страницу только для участников на PHP?

Как безопасно реализовать систему входа на страницу только для участников на PHP?

Опубликовано 17 ноября 2024 г.
Просматривать:932

How to Securely Implement a Member-Only Page Login System in PHP?

PHP: защита страниц только для участников с помощью системы входа в систему

Проблемы с предоставленным кодом

В предоставленном коде PHP встречается несколько проблем, которые затрудняют его функциональность:

  1. Извлечение результатов запроса: вместо использования $data1 = $conn->query($sql1); правильный подход — использовать $data = mysqli_fetch_array($conn->query($sql1)); или $data = $conn->query($sql1)->fetch_array(); для получения результатов запроса.
  2. Подключение и выполнение базы данных: соединение с базой данных должно быть установлено с использованием $total = $data = 0; перед выполнением каких-либо запросов.
  3. Синтаксис MySQLi: Запрос для вставки токена должен использовать обратные кавычки () вокруг имен таблиц и столбцов (токены INSERT INTO (tk, gauth) VALUES (?,? )`) вместо одинарных кавычек.
  4. Аутентификация пользователя: Логика аутентификации должна возвращать результат запроса, а не полагаться на логические значения ($result = $conn->query($sql3)->fetch_array();).
  5. Генерация токена: существующий метод генерации токенов небезопасен, поскольку он использует openssl_random_pseudo_bytes(). Вместо этого в коде следует использовать криптографически безопасный генератор случайных чисел (CSPRNG), например random_bytes().

Предлагаемое решение

  1. Упрощение операций с базой данных: Используйте один запрос для получения информации о пользователе и проверки учетных данных.
  2. Используйте подготовленные операторы: Bind параметры для предотвращения уязвимостей SQL-инъекций.
  3. Безопасное генерирование токенов: используйте random_bytes() или аналогичную функцию для безопасной генерации токенов.
  4. Сохраняйте данные аутентификации в сеансе : сохраните токен аутентификации в переменной сеанса вместо cookie.
  5. Проверка токенов: выполните запрос к базе данных к таблице токенов, чтобы проверить предоставленный токен.

Улучшенный код

Следующее пересмотренный код устраняет выявленные проблемы и обеспечивает более безопасную систему входа на страницу только для участников:

connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    // Prepare statement for user authentication
    $sql_auth = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
    $sql_auth->bind_param("ss", $_POST['uname'], $_POST['pss']);
    $sql_auth->execute();
    $result_auth = $sql_auth->get_result();

    // Authenticate user
    if ($result_auth->num_rows > 0) {
        $user = $result_auth->fetch_assoc();
        $correct = TRUE;
    } else {
        $correct = FALSE;
    }

    // Generate token
    if ($correct === TRUE) {
        $hex = bin2hex(random_bytes(3));
        $_SESSION['auth'] = $hex;
        $_SESSION['logstat'] = TRUE;
    }

    // Close connection
    $conn->close();
?>
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3