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

PHP: Как лучше всего защитить паролем папку или страницу

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

Есть страница, на которой будут перечислены контакты для организации и нужно защитить паролем всё это, не имея учетной записей у пользователей. Только один пароль, который периодически меняется и распространяется в группе.

Вариант первый

access.php

<?php
//put sha1() encrypted password here - example is 'hello'
$password = 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d';

session_start();
if (!isset($_SESSION['loggedIn'])) {
 $_SESSION['loggedIn'] = false;
}

if (isset($_POST['password'])) {
 if (sha1($_POST['password']) == $password) {
  $_SESSION['loggedIn'] = true;
 } else {
  die ('Incorrect password');
 }
} 

if (!$_SESSION['loggedIn']): ?>

 <form method="post">
  Password: <input type="password" name="password"> <br />
  Login: <input type="submit" name="submit" value="Login">
 </form>

<?php
exit();
endif;
?>

Затем в каждый файл, который требует защиты пропишите:

require('access.php');
// secret text

Это не очень безопасное решение, также вы можете добавить страницу logout.php, например:

session_start();
$_SESSION['loggedIn'] = false;
// You have logged out 

Вариант второй

Есть страница login.php, которая принимает пароль, а затем устанавливает файл cookie, если данные для входа правильные. Каждый файл php может затем проверить наличие файла cookie, чтобы определить, является ли пользователь logged in или нет, и соответственно отобразить информацию.

login.php

if(isset($_POST['password']) && $_POST['password'] == 'my_top_secret_word') {
 setcookie('loggedin', 'true', time() + 1200, '/url/');
} else {
 setcookie('loggedin', 'false', time() - 1200, '/url/');
 // display a login form here
}
// etc

Затем каждая страница protected будет проверять наличие этого файла cookie:

if(isset($_COOKIE['loggedin'])) {
 if($_COOKIE['loggedin'] == 'true') {
  $showHidden = true;
 } else {
  $showHidden = false;
 }
} else {
 $showHidden = false;
}

Идея рабочая, но не совсем надежная...

Создать хэш пароля

$hash = password_hash('your_password', PASSWORD_DEFAULT);

Проверить хешированные пароли

if (password_verify('your_password', $hash)) {
    // hash is valid
}