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

PHP: Простейшая авторизация с помощью функций password_hash() и password_verify()

Пока ты новичок можно использовать такие функции как sha1(), md5() и другие методы шифрования паролей, но это не лучшая практика и, как правило, не рекомендуется. Лучше использовать встроенные функции в PHP: password_hash() и password_verify(). И вот простой пример авторизации с ипользованием данных функций.
PHP: Простейшая авторизация с помощью функций password_hash() и password_verify()

Создадим файл 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>

zip