Создадим файл access.php с функцией расшифровки пароля, полученного из файла pass.txt, с помощью password_verify():
<?php
$filename = __DIR__ . '/pass.txt';
$hash = file_get_contents($filename);
session_start();
if (!isset($_SESSION['loggedIn'])) {
$_SESSION['loggedIn'] = false;
}
if (isset($_POST['password'])) {
$password = $_POST['password'];
if (password_verify($password, $hash)) {
$_SESSION['loggedIn'] = true;
} else {
die ('Неверный пароль');
}
}
if (!$_SESSION['loggedIn']): ?>
<form method="post">
Password: <input type="password" name="password"> <br />
<input type="submit" name="submit" value="Login">
</form>
<?php
exit();
endif;
?>
Для информации: если перед функцией password_verify
поставить восклицательный знак if(!password_verify($password, $hash))
получаем обратное действие: правильный пароль - доступ запрещен, неправильный пароль - доступ открыт. Оно нам надо, нет, едем дальше.
Затем в каждый файл (например index.php), который требует защиты пропишем:
<?php
require('access.php');
echo '<a href="logout.php">logout</a>';
?>
// Контент, который будет доступен после правильного ввода пароля
Теперь, мы хотим изменить пароль и записать его в файл pass.txt предварительно закодировав функцией password_hash()
, создадим файл change.php:
<?php
if(isset($_POST['submit']))
{
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_DEFAULT);
$filename = __DIR__ . '/pass.txt';
$fh = fopen($filename, 'w');
fwrite($fh, $hash);
fclose($fh);
}
?>
<form method="post">
Новый пароль: <input type="password" name="password"> <br />
<input type="submit" name="submit" value="Сохранить">
</form>
В итоге, после изменения пароля, мы будем иметь файл pass.txt с зашифрованным содержанием, например, таким:
$2y$10$/HztHImlLlGpEw/r78n0o.GnlvQuPPFGUEKdMLBK5xWtlT9Ynx86K
Страница выхода logout.php:
<?php
session_start();
$_SESSION['loggedIn'] = false;
?>
И запрещаем прямой доступ из браузера к файлу pass.txt через файл .htaccess:
<FilesMatch "\.txt$">
Order Deny,Allow
Deny from all
</FilesMatch>