Базова автентифікація

У даній статті буде розглянуто найпростіший і доступний спосіб захисту — базова автентифікація.

Зауваження

Аутентифікація — це процес, за допомогою якого перевіряється, що хтось є саме тим, за кого він себе видає. Як правило, перевірка включає в себе введення імені та пароля.

Розглянемо, як працює базова автентифікація.
При зверненні відвідувача у захищену директорію, сервер Apache у відповідь на запит посилає заголовок код 401 (401 authentication required header). Браузер відвідувача приймає заголовок код 401 і виводить вікно з полями для введення імені користувача і пароля. Після введення імені і пароля ці дані відсилаються назад сервера, який перевіряє ім’я користувача на предмет знаходження в спеціальному списку, а пароль на правильність. Якщо все вірно, то відвідувач отримує доступ до ресурсу. Разом з заголовком браузеру надсилається спеціальної ім’я, зване областю дії. Браузер кешує не тільки ім’я і пароль, щоб передавати їх при кожному запиті, а й область. Завдяки цьому, введення імені і пароля в захищається директорії здійснюється тільки раз. В іншому випадку їх необхідно було б вводити при кожному запиті до захищається директорії. Кешування параметрів аутентифікації (ім’я, пароль, область дії), зазвичай здійснює лише у межах одного сеансу.

Зауваження

При базової аутентифікації ім’я користувача і його пароль передаються в мережі у відкритому вигляді протягом всього сеансу, коли користувач працює з захищеною директорією. Хакер може перехопити цю інформацію, використовуючи мережевий аналізатор пакетів. Даний вид аутентифікації не повинен використовуватися там, де потрібна реальна захист комерційно-цінної інформації.

Зауваження

WEB-сервер Apache підтримує ще один вид захисту — digest-аутентифікацію. При digest-пароль аутентифікації не передається у відкритому вигляді, а у вигляді хеш-коду, обчисленому по алгоритму MD5. Тому пароль не може бути перехоплено при скануванні трафіку. Але, на жаль, для використання digest-аутентифікації необхідно встановити на сервер спеціальний модуль — mod_auth_digest. А це знаходиться тільки в компетенції адміністрації сервера. Також, до недавнього часу, digest-автентифікація підтримувалися не всіма видами браузерів.

Захист сайту — це просто

Для того щоб захистити сайт, потрібно виконати наступну послідовність дій: створити файл з паролями, переписати його на сервер, створити файл .htaccess і теж переписати його на сервер.
Для організації захисту знадобиться.

1. WEB-сайт і FTP-доступ до нього.
2. Права на створення файлів .htpaccess і організацію захисту з допомогою них.
3. Утиліта генерації паролів htpasswd.exe

Перевірка роботи файлу .htaccess на сервері

Для того щоб перевірити чи є у Вас права на організацію захисту з допомогою файлів .htaccess створіть текстовий файл з ім’ям .htaccess (першим символом йде точка, розширення відсутній).

Зауваження

Зручно створювати файли .htaccess з допомогою вбудованого редактора в оболонках Far, WindowsCommander, TotalCommander тощо, а також в редакторі Блокнот.

Зауваження

Щоб блокнот не підставляв автоматично розширення txt, у діалозі збереження в випадаючому списку «тип файлу» виберіть опцію «Всі файли».

Перед тим як зберегти файл, впишіть в нього наступні рядки:

Перевірка роботи .htaccess

AuthType Basic
AuthName admin
require valid-user

Потім, через FTP-доступ, перепишіть файл .htaccess на сайт, в ту директорію, яку ви хочете захистити.

Зауваження

Дія файлів .htaccess розповсюджується не тільки на ту директорію, де лежить файл, але і на всі поддиректрии, що лежать рівнем нижче.

Далі через браузер зверніться до цієї директорії. Якщо Ви захищаєте директорію admin і переписали туди файл .htaccess, то для перевірки Вам слід вписати в адресний рядок браузера наступний URL: http://www.mysite.ru/admin/.

Якщо після цього Вам відкрився запит на введення логіна і пароля, як на малюнку нижче, то тестування пройшло успішно і можна продовжувати захист директорії.

Якщо ви все зробили правильно, але віконце для введення пароля не з’явилося, то це означає, що налаштування сервера забороняють Вам використовувати файли .htaccess для захисту директорій. Для вирішення даного питання Вам слід зв’язатися з адміністрацією сервера, або використовувати інший тип захисту.
Після того, як було з’ясовано, що файли .htaccess працюють, слід видалити з сайту щойно написаний тестовий файл.

Зауваження

Якщо з якихось причин Ви не можете видалити файл .htaccess, то створіть порожній файл .htaccess і замініть їм файл, що лежить на сервері.

Створення файлу з паролями .htpasswd

Файл з паролями створюється утилітою htpasswd.exe. Якщо у Вас на машині встановлений WEB-сервер Apache, то дана утиліта знаходиться в директорії з встановленим Apache-го в папці bin.

Зауваження

Якщо у Вас не встановлений Apache, то утиліту htpasswd.exe можете скачати за посиланням: http://www.softtime.ru/files/htpasswd.zip.

Для роботи з утилітою htpasswd.exe необхідний інтерфейс роботи з командним рядком. Інтерфейсом роботи з командним рядком мають такі програми як Far, WindowsCommander і т. п. Тут буде розглянута робота з командного рядка за допомогою утиліти cmd, яка входить в постачання Windows 2000/XP і т. п.
Натисніть «Пуск»->»Виконати», введіть у рядок введення cmd і натисніть ОК. Вам відкриється вікно утиліти CMD.

Далі необхідно перейти в директорію, де знаходиться утиліта htpasswd.exe. Припустимо, сервер Apache встановлений в директорії з:/Apache2, тоді введіть в командному рядку команду: cd../../apache2/bin і натисніть enter.

Ви перейшли в директорію з:Apache2 in. Тепер потрібно дати команду на створення файлу з паролем. Введіть у командному рядку:

htpasswd -cm .htpasswd admin

* -cm — це ключі для утиліти. Ключ з — вказує, що необхідно створити новий файл з паролями. Якщо файл з таким ім’ям вже існує, то він буде перезаписаний. Ключ m — визначає шифрування по алгоритму MD5.
* .htpasswd — ім’я файлу з паролями (можете використовувати будь-яке ім’я).
* admin — ім’я відвідувача, якому буде дозволено доступ в закриту область сайту.

У відповідь, повинен з’явиться запит на введення пароля і його повтор. Якщо все правильно, то у завершенні з’явиться повідомлення: Adding password for user admin. І в директорії c:Apache2 in з’явиться файл .htpasswd, на якому буде знаходитися рядок з ім’ям користувача і хеш-кодом його пароля. Для того, що б у той же файл .htpasswd додати ще одного користувача слід прибрати ключ -c з команди запуску утиліти htpasswd.exe

htpasswd -m .htpasswd admin

Зауваження

Якщо файл з паролями не був створений, то можливо, деякі ключі утиліти не підтримуються в Вашій операційній системі. Наприклад, іноді не підтримується ключ m. В цьому випадку, Вам потрібно ввести htpasswd -c .htpasswd admin
Для того, щоб подивитися ключі і параметри роботи утиліти введіть htpasswd.exe /? Вам буде видано опис інтерфейсу.

Отже, файл з паролями створений. Тепер Вам необхідно переписати його на сервер. Файли з паролями дуже бажано класти вище кореневій директорії сайту — туди, куди не буде доступу відвідувачам.
Якщо це неможливо, то файли з паролями слід обов’язково захищати. Це можна зробити за допомогою файлів .htaccess. Щоб захистити файли з паролями створіть файл з рядками, представленими в наступному лістингу.

Захист файлів .htpasswd

deny from all

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

Створення файлу .htaccess

Для захисту директорії можуть використовуватися наступні директиви:

* AuthType — Тип використовуваної аутентифікації. Для базової аутентифікації ця директива повинна мати значення: Basic
* AuthName — Ім’я області дії аутентифікації. Текст, що допомагає відвідувачу зрозуміти, куди він намагається отримати доступ. Наприклад, може бути написано: «Private zone. Only for administrator!»
* AuthUserFile — шлях до файлу з паролями (.htpasswd).
* AuthGroupFile — шлях до файлу груп, якщо він існує.
* Require — Одне або кілька вимог, які повинні бути виконані для отримання доступу до закритої області.

Приклад файлу .htaccess

AuthType Basic
AuthName «Private zone. Only for administrator!»
AuthGroupFile /usr/host/mysite/group
AuthUserFile /usr/host/mysite/.htpasswd
require group admins

Слід більш докладно описати директиви AuthUserFile і AuthGroupFile. У них прописуються абсолютні шляху до відповідних файлів від кореня сервера.

Увага!

Відносні шляхи працювати не будуть!

Шлях від кореня сервера, можна дізнатися, запитавши у адміністрації сервера, або можна спробувати з’ясувати його самим. Для цього виконайте функцію phpinfo(). На екран буде виведена фіолетова таблиця. Значення абсолютного шляху від кореня сервера можна подивитися в змінних: doc_root, open_basedir, DOCUMENT_ROOT.
Директива Require визначає кому дозволено доступ до закритої області. Наприклад,

* require valid-user — дозволений доступ усім, що пройшли перевірку
* require user admin alex mango — дозволений доступ тільки відвідувачам з іменами admin, alex, mango. Природно, вони повинні пройти аутентифікацію.
* require group admins — дозволений доступ всім користувачам з групи admins

Файли груп

Якщо до захищається області сайту повинна мати доступ велика група людей, то зручно об’єднати людей у групи, і дозволяти доступ, визначаючи приналежність відвідувача до групи.
Формат файлу груп дуже простий. Це текстовий файл, кожен рядок якої описує окрему групу. Першим у рядку повинно йти назва групи з двокрапкою. А потім через пробіл перераховуються відвідувачі, які входять в групу.

Приклад файлу груп

Admins: admin alex mango
Користувачі: guest user max23

В групу Admins входять відвідувачі з іменами admin, alex, mango. А групи Users входять відвідувачі з іменами guest, user, max23.

Приклади файлів .htaccess

Доступ всім користувачам, які пройшли авторизацію

AuthType Basic
AuthName «Private zone. Only for administrator!»
AuthUserFile /usr/host/mysite/.htpasswd
require valid-user

Доступ тільки користувачам і root admin

AuthType Basic
AuthName «Private zone. Only for administrator!»
AuthUserFile /usr/host/mysite/.htpasswd
require user root admin

Доступ користувачів з групи admins

AuthType Basic
AuthName «Private zone. Only for administrator!»
AuthUserFile /usr/host/mysite/.htpasswd
AuthGroupFile /usr/host/mysite/group
require group admins

Заборона доступу тільки до файлу private.zip

AuthType Basic
AuthName «Private zone. Only for administrator!»
AuthUserFile /usr/host/mysite/.htpasswd
require valid-user