@nikitahudkov

Почему возникает ошибка при ограничении доступа к профилю для незарегистрированных юзеров?

Пишу сайт с авторизацией и регистрацией. Механизм работает, записи заносятся в БД и т.д. Но я также решил ограничивать доступ к некоторым страницам для незарег. юзеров, например к профилю. В итоге код не работает.

Вот код страницы profile.php :

<?php

    session_start();

    if ($_SESSION['user']) header("Location: index.php");

?>


Вот код механизма авторизации, чтобы Вы понимали откуда ключ user:

<?php

    session_start();
    require_once 'connection.php';

    $login = $_POST['login'];
    $password = md5($_POST['password']);

    $check_user = mysqli_query($connect, "SELECT * FROM `users_onlycash` WHERE `login` = '$login' AND `password` = '$password'");

    if (mysqli_num_rows($check_user) > 0) {

        $user = mysqli_fetch_assoc($check_user);

        $_SESSION['user'] = [
            "id" => $user['id'],
            "login" => $user['login'],
            "password" => $user['password'],
            "balans" => $user['balans']
        ];

        header("Location: profile.php");

    } else {
        $_SESSION['message'] = "Неверный логин или пароль";
        header("Location: login_page.php");
    }

?>


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

Warning: Undefined array key "user" in C:\xampp\htdocs\OnlyCash\login_page.php on line 5

Я писал этот код по одному видео из ютуба. У ютубера все работало нормально и никаких ошибко не возникало, но я скачал его проект себе на компьютер и такие же ошибки выводятся у меня и там. Помогите пожалуйста разобраться в чем проблема.
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега PHP
Надо понимать что слово "ютубер" это синоним слова "криворукий идиот".
И проблемы в этом коде куда более серьёзные, чем банальная ошибка, которая лечится с помощью isset()

Куда важнее две ДЫРИЩИ в этом коде, при наличии которых что ограничивай - что не ограничивай, но по сайту будет ходить кто захочет и как захочет.

Во-первых, этот код вообще ничего не ограничивает. Потому что после отправки заголовка Location надо всегда принудительно завершать работу скрипта. потому что сама по себе отправка заголовка это, разумеется, не делает. И клиент может тупо заголовок проигнорировать и вместо редиректа получить саму страницу.
Во-вторых, разумеется банальнейшая SQL инъекция, с помощью которой кто угодно сможет залогиниться под кем угодно, вообще не зная ни одного пароля
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы