@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

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

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

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

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

Похожие вопросы