Basic HTTP Authentication

В цілях безпеки нам іноді доводиться «запаролювати» певні веб-директорії. Кажучи академічно, застосувати HTTP аутентифікацію, як додатковий рівень захисту. Найчастіше її налаштовують до публічних URL адрес адміністрування популярних CMS, форумів, серверних панелей тощо. Найпростіший спосіб зробити це, скористатися базовою HTTP аутентифікацію (Basic HTTP Authentication). Існують й інші, менш поширені схеми: Bearer, Digest, Mutual, HOBA, AWS4-HMAC-SHA256, які не є темою цього огляду. Оскільки дані аутентифікації (user, password) передаються безпосередньо у заголовках запиту, такий тип захисту не можна вважати безпечним без використання захищеного HTTPS з’єднання з застосуванням дійсних SSL сертифікатів.

.htpasswd

Усі дані доступу прийнято зберігати в системному файлі .htpasswd. Це не строга вимога, а лише усталене правило системного адміністрування. Ім’я користувача та пароль зазначаються у форматі username:password. Кожна така пара вводяться з ново рядка. У якості username використовується будь-яке ім’я (наприклад, «admin», «guest», «client468», «root» тощо). А ось гасло (password) в чистому виді вводити не можна. Спершу його потрібно закодувати у base64 форматі. Існують різні способи, щоб закодувати текстовий рядок в base64 кодуванні. Найпростіший, на мою думку — співзвучна php функція base64_encode(). Виконуємо простий скрипт:

<?php
echo base64_encode(‘qwerty’); 
?>

Замість “qwerty” вписуємо власне гасло. Отримаємо щось на кшталт “cXdlcnR5”. Зберігаємо .htpasswd файл.

Налаштування Apache

Для захисту директорії розміщюємо в ній файл .htaccess з наступними директивами:

AuthType Basic
AuthName "Access to the site"
AuthUserFile /path/to/.htpasswd
Require valid-user

Як бачимо, шлях до .htpasswd задає директива AuthUserFile. Бажано не розміщувати файл .htpasswd в директорії чи піддиректоріях DOCUMENT_ROOT, щоб його не прочитали web-користувачі. В іншому разі переконайтесь, що файл закритий від читання і недоступний за посиланням в браузері.

Налаштування Nginx

Відкрийте конфігурацію сайту та доповніть налаштуваннями директорії, що бажаєте запаролити:

location /my_dir {
    auth_basic "Access to the site";
    auth_basic_user_file /path/to/.htpasswd;
}

Після збереження конфігурації не забудьте перезавантажити Nginx. Ось і все, тепер при введені зазначеної URL в браузері сервер запитає дані доступу.

Basic HTTP Authentication

P.S. Також можна користуватися посилання типу https://username:password@www.example.com/, щоб не вводити дані кожен раз.

Доступні VPS/VDS Доступні VPS/VDS
2022-10-23   117