HTTP-автентифікація в PHP

Можливо використовувати функцію header()для отправки сообщения"Authentication Required" браузеру, змусивши його показати віконце для введення логіну та пароля. Як тільки користувач заповнить логін і пароль, посилання, що містить PHP-скрипт, буде викликане ще раз з зумовленими зміннимиPHP_AUTH_USER, PHP_AUTH_PW та AUTH_TYPE, встановленими в логін, пароль та тип аутентифікації відповідно. Ці зумовлені змінні зберігаються у масиві $_SERVER. Підтримуються тільки: "Basic" та "Digest". Докладніше дивіться функцію header()

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

Приклад #1 Приклад Basic HTTP-автентифікації

Loading...

Приклад #2 Приклад Digest HTTP-автентифікації

Це приклад реалізації простого скрипту Digest HTTP аутентифікації. За подробицями звертайтесь до » RFC 2617

Loading...

Зауваження Зауваження щодо сумісності

Будьте особливо уважні під час вказівки HTTP-заголовків. Для того, щоб гарантувати максимальну сумісність з найбільшою кількістю різних клієнтів, слово "Basic" має бути написане з великої літери "B", регіон (realm) повинен бути взятий у подвійні (не одинарні!) лапки, і рівно одна прогалина повинна передувати коду 401 у заголовку HTTP/1.0 401. Параметри автентифікації повинні розділятися комами, як це було показано у прикладі Digest автентифікації вище.

Замість простого відображення на екрані змінних PHP_AUTH_USER та PHP_AUTH_PW, вам, можливо, знадобиться перевірити їхню коректність. Використовуйте для цього запит до бази даних або пошук користувача в файлі dbm.

Ви можете переглянути особливості роботи браузера Internet Explorer. Він дуже вимогливий до параметра заголовків, що передаються. Трюк із зазначенням заголовка WWW-Authenticateперед отправкой статусаHTTP/1.0 401 поки що працює для нього.

Зауваження Примітка щодо конфігурації

PHP використовує вказівку директиви AuthType для вказівки того, використовується зовнішня автентифікація чи ні.

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

І Netscape Navigator та Internet Explorer очищають кеш аутентифікації поточного вікна для заданого регіону (realm) при отриманні від сервера статусу 401. Це може використовуватися для реалізації примусового виходу користувача та повторного відображення діалогового вікна для введення імені користувача та пароля. Деякі розробники використовують це для обмеження авторизації за часом або надання кнопки "Вихід".

Приклад #3 Приклад HTTP-автентифікації з введенням нової пари логін/пароль

Loading...

Ця поведінка не регламентується стандартами HTTP Basic-аутентифікації, отже, ви не повинні залежати від цього. Тестування браузера Lynx показало, що Lynx не очищає кеш авторизації при отриманні від сервера статусу 401, і, натиснувши послідовно "Back", а потім "Forward" можна відкрити таку сторінку, за умови, що необхідні атрибути авторизації не змінилися. Однак користувач може натиснути клавішу '_' для очищення кешу автентифікації.

Для того, щоб досягти коректної роботи HTTP-аутентифікації в IIS сервері з CGI версією PHP, ви повинні відредагувати конфігураційне налаштування IIS під назвою "Directory Security". Клацніть на написи"Edit" та встановіть опцію "Anonymous Access"Всі інші поля повинні залишитися невідзначеними.

Зауваження Примітка щодо IIS:
Для того, щоб HTTP-автентифікація коректно працювала в IIS, у конфігурації PHP-опція cgi.rfc2616_headers має бути встановлена ​​значенням (значение по умолчанию).