Чистий auth php. HTTP Встановлення захисту на сторінку за допомогою MySQL і PHP. Приклад #2 Приклад Digest HTTP-автентифікації
Іноді буває потрібно закрити від стороннього доступу PHPсторінку, якщо Ви робите закриту область сайту. Це може бути якась прихована інформація для ваших клієнтів чи відвідувачів сайту, якийсь адміністраторський інтерфейс для вас тощо. Можна придумати сотні різних завдань, які потребують обмеження доступу.
Закрити таку сторінку можна кількома способами, що взаємодоповнюють один одного:
- Захист паролем (логін/пароль) за допомогою змінних $_SERVER["PHP_AUTH_USER"]і $_SERVER["PHP_AUTH_PW"].
- Захист по IPадресою клієнта за допомогою змінної $_SERVER["REMOTE_ADDR"].
- Захист по MACадресу в локальних мережах (додатково до захисту IP).
Розберемо спочатку перший спосіб, який є основним. Він дозволяє закрити доступ до сторінки за логіном та паролем, таким чином доступ можуть отримати тільки люди. знаючі логінта пароль. До того ж їх можна розділяти за цією ознакою та видавати відповідно різну інформаціюдля кожного. Реалізується за допомогою видачі спеціальних полів у заголовку протоколу HTTP. Створимо функцію auth_send():
" ,"
Помилка автентифікації
" ,"Зверніться до адміністратора для отримання логіну та пароля.
" ,""; exit; ); ?>Цю функцію повідомляє браузеру про те, що для доступу потрібна авторизація за логіном та паролем. І видає також сторінку в HTMLдля користувача.
" ,"
Ласкаво просимо!
" ,"Ви зайшли за логіном ",$auth_user," та паролю ",$auth_pass,".
" ,""; ?>
Код перевірки логіну та пароля не надто складний у даному випадку, тому що реалізований для однієї людини. Логіка роботи проста, якщо немає змінної $_SERVER["PHP_AUTH_USER"]і $_SERVER["PHP_AUTH_PW"]або їх значення не збігаються з потрібними, то викликаєте функцію auth_send(). Не забувайте, що в ній наприкінці викликається exitтому виконання програми припиняється.
Наступний ступінь захисту реалізується за фільтрацією IPадреси клієнта, що підключається. Звичайно в інтернеті багато провайдерів видають IPадреси на час і цей захист використовувати марно, але якщо мова йдепро корпоративні локальні мережі, то дана перевірказабезпечить додатковий захист.
Ваш IP не знайдено!!!"; exit; ); ?>
Тут у рядку $allowed_ipsчерез пропуск вказано IPадреси, яким дозволено доступ. Далі отримуємо масив за допомогою explode()і робимо пошук адреси клієнта з $_SERVER["REMOTE_ADDR"]. Я для пошуку застосував функцію array_search(), так як невірняка її код реалізований на Сі буде працювати дещо швидше, ніж те, що ми можемо написати на PHPза допомогою циклів forабо foreach. Але швидкість тут не головне:)
І останній ступінь захисту це перевірка MACадреси. Вона відноситься до розряду параноїдальних і її варто використовувати, якщо ви отримуєте доступ з локальної мережіта дані, які ви захищаєте дійсно дуже важливі. Я поки що реалізував цю перевірку тільки на системі Linux, Через відносну простоту реалізації. Але Ви можете спробувати її реалізувати під будь-яку іншу платформу. Пишемо функцію:
Як лінуксоїди вже зрозуміли вона заснована на ARPтаблиці системи, доступ до якої можна отримати за допомогою файлу /proc/net/arp. Функція шукає по рядках необхідний IPадресу і повертає її MACадреса:
Ваш IP=192.168.10.15 та MAC=00:04:31:E4:F8:37
В системі Windowsможливо також є якісь способи отримати MACпростіше, але з тих, що реально працюють, це висновок ARPтаблиці системи командою:
C:\WINDOWS\>arp -a Інтерфейс: 192.168.10.15 on Interface 0x1000003 Адреса IP Фізична адреса Тип 192.168.10.1 00-50-22-b0-6a-aa динамічний 192.168.10.-9 e8 динамічний 192.168.10.3 00-04-61-9e-26-09 динамічний 192.168.10.5 00-0f-38-6a-b1-18 динамічний
Реалізувати захист на основі цієї адреси Ви зможете самі, якщо Вам це дійсно треба:) Але пам'ятайте, що якщо у Вас в мережі некероване обладнання без можливості прив'язування MACадреси до порту, цей захист може не спрацювати, тому що можна підробити всі Ваші ідентифікаційні дані, що використовуються для захисту (логін, пароль, IP та MAC адреса).