MrAnderson1999
@MrAnderson1999
Секси

Как сделать надежную защиту для личной страницы?

Добрый день, нам на курсовой задали написать защищенную личную страницу и авторизацию для неё.
Есть подозрения, что всё не может быть на столько просто.
Подскажите ошибки, как можно обойти такую защиту и как лучше сделать?

В логине login.php
<form action="user.php" method="post">
Login: <input type="text" name="login"><br>
Password: <input type="password" name="password"><br>
<input type="submit">
</form>


В личной странице user.php
<?php
$login = "user1999";
$password = "pwd1999";

if(!isset($_POST["login"]) || !isset($_POST["password"])) {
  header("Location: login.php");
  exit;
}
else {
  if($_POST["login"] != $login || $_POST["password"] != $password) {
    header("Location: login.php");
    exit;
  }
  else {
    echo $login;
  }
}
?>
  • Вопрос задан
  • 95 просмотров
Решения вопроса 2
@shevchenko__k
Помогаю новорожденным web программистам
во первых у тебя не хватает сессии. записывай свой логин в сессию и проверяй на странице. если есть сесия с таким значением то пропускать на страницу а если нет или не совпадает то не пропускаем на домашнюю страницу. сслыка по сессиям https://www.php.net/manual/ru/reserved.variables.s...

а вообще по хорошему надо к этому же хранить логин и пароль в базе данных и и пароль хранить как хешированый https://www.php.net/manual/ru/function.hash.php
Ответ написан
puchkovk
@puchkovk
Усложнять — просто. Упрощать — сложно.
1. Хранить пароль в открытом виде - неправильно.
2. На каждой странице вводить пароль - неудобно. Лучше в сессии запомнить, что вы уже его спрашивали

$password = '...'; // результат работы crypt('пароль');
if (empty($_SESSION['login'])) {
  if($_POST["login"] === $login && !empty($_POST["password"]) && crypt($_POST["password"]) === $password) {
    // здесь создаем сессию, и пишем в нее что-то типа
    $_SESSION['login'] = TRUE;
  }
}


Это черновик, а не готовый код, в нем не хватает некоторых проверок. Применяйте с головой =)

Очень желательно ознакомиться с вот этим:
https://www.php.net/manual/ru/faq.passwords.php#fa...

Второй вариант - использовать авторизацию веб-сервера. Например, для nginx:
https://nginx.org/ru/docs/http/ngx_http_auth_basic...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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