Справочники, инструменты, документация

PHP: Как ограничить доступ к html-странице паролем

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

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

Вариант 1

<form id="auth">
  <input type="password" id="pass" autofocus /><br/>
  <div id="err" style="display: none; color: red;">Неправильный пароль</div>
  <button>Войти</button>
</form>
<script>
auth.addEventListener('submit', function (evt){
  evt.preventDefault(); // отменяем действие по умолчанию

  var xhr = new XMLHttpRequest;
  xhr.open('POST', '/ctrl.php', false); // отправляем синхронный запрос на сервер
  xhr.send('pass='+pass.value);

  if( xhr.responseText == 'invalid' ){ // проверяем ответ
    err.style.display = ''; // выводим ошибку
  } else {
    location.href = xhr.responseText; // переходим на страницу
  }
});
</script>

ctrl.php:

<?php
  $pass = isset($_POST['pass']) ? trim($_POST['pass']) : '';
  if($pass == $secret){
    echo "/secret-page.html";
  } else {
    echo "invalid";
  }
?>

Вариант 2

Самый лучший способ изменить расширение Вашего файла с .html на .php Так Вы по крайней мере сделаете код, который представлен снизу, компилируемым сервером. Это означает, что он не будет доступен другим пользователем. Они получат только конечный результат.

Инструкция:

  • Просто добавьте этот скрипт наверху Вашей страницы.
  • Замените login и pass на нужные Вам значения.

P.S. Это слабая защита, для больших проектов стоит найти другое решение.

$valid_passwords = array ("login" => "pass");
$valid_users = array_keys($valid_passwords);

$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];

$validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);

if (!$validated) {
 header('WWW-Authenticate: Basic realm="My Realm"');
 header('HTTP/1.0 401 Unauthorized');
 die ("Not authorized");
}

echo "<p>Здравствуйте $user.</p>";
echo "<p> Поздравляем, Вы успешно прошли авторизацию.</p>";
На этой странице