Как исправить ошибку авторизации?

Добрый день.
Сделал админку на сайте состоит из страницы авторизации registrate.html:
<DOCTYPE html>
<html lang="ru">
<head>
	<meta charset="UTF-8">
	<title>Страница Авторизации</title>
	<link rel="icon" href="../favicon.ico" type="image/x-icon">
        <link rel="stylesheet" type="text/css" media="screen and (min-width:1024px)" href="../css/single.css"/>
	<link rel="stylesheet" type="text/css" media="screen and (max-width:1023px)" href="../css/adm-mobile.css"/> 
</head>
<body data-page="single-list" class="list">
	<header class="wrap">
        <div class="menu-container">
            <p>Авторизация:</p>
            <form action="..//administrate/avt.php" method="post">
            <input class="input-text" name="login" placeholder="Логин">
            <input class="input-text"type="password" name="password" placeholder="Пароль">
            <input class="add-btn" type="submit" value="Войти">
            </form>
        </div>
	</header>
<main>
</main>
<footer></footer>
<script></script>
</body>

и соответственно скрипт avt.php
<?php
$login = $_POST['login'];
$pas = $_POST['password'];
if ($login == '********' && $pas == '**************')
  {
  session_start();
  $_SESSION['admin'] = true;
  $script = 'adminpanel.php';
  }
else
$script = 'registrate.html';
header("Location: $script");

ну и сама страница adminpanel.php с шапкой
<?php
header('Content-type: text/html; charset=utf-8');
session_start();
if (! $_SESSION['admin']);
header('Location: avt.php');
?>

сегодня вдруг стала вылетать ошибка :
Notice: Undefined index: login in avt.php on line 2
Notice: Undefined index: password in avt.php on line 3
Warning: Cannot modify header information - headers already sent by (output started at avt.php:2) in avt.php on line 12
Подскажите как исправить?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
У вас всегда срабатывает header('Location: avt.php');. Соответственно, происходит переход на GET avt.php, в POST ничего нет, выдаются предупреждения об отсутствии индексов login и password. А, поскольку в выходной поток уже что-то передано, заголовки больше не принимаются и header("Location: $script"); также выдаёт предупреждение.
Первое: переход должен быть не на avt.php, а на registration.html
Второе: if (! $_SESSION['admin']); смысла не имеет из-за точки с запятой в конце.
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Смотрите.
Вот вы заходите на страницу adminpanel.php без авторизации. Там происходит что?
Правильно, перенаправление на avt.php.
Вы попадаете на страницу avt.php, где первой строчкой идет обращение к переменной $_POST['login'].
И откуда она там возьмется?

Чтобы этого не было, из adminpanel.php надо направлять куда?

Кроме того.
Просто header('Location: '); писать недостаточно. Если я не захочу, то не буду переходить на указанную страницу, а останусь на этой.
то есть попаду на админпанель без авторизации.
Это очень дурацкая и очень известная дыра в безопасности.
После header('Location: '); всегда должно идти die;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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