Basic аутентификация и авторизация
Сегодня я хотел бы затронуть тему аутентификации и авторизации. Только не подумайте, что у этих двух слов одно и то же значение. Простыми словами, аутентификация - это когда кто-то проверяет тебя на наличие права доступа, а авторизация - это когда ты даешь себя на проверку права доступа (предоставление определенных прав определенному лицу).
Basic-аутентификация с помощью Apache
Почему Basic? Потому что бывает еще не только basic, но и digest и другие виды. Но мы их здесь касаться не будем, а коснемся наиболее простого вида аутентификации, который можно реализовать средствами сервера Apache.
Наверняка многие видели перед заходом в какую-нибудь личную область какого-то сайта следующее окно, выдаваемое браузером:
Мы тоже можем такое сделать! А как - читайте дальше.
Добавим в файл .htaccess, лежащий в корне нашего сайта, следующие строки:
AuthType Basic
AuthName ‘Login please’
AuthUserFile “D:\MyDocs\sites\test\.htpasswd”
Require valid-user
Теперь нам нужно сгенерировать пару логин-пароль, которая будет лежать в файле .htpasswd (заметьте, что мы указали полный путь к нему). Делается это с помощью консольной утилиты htpasswd.exe, входящей в состав Apache. Например, создадим юзера с именем novice и паролем novice:
htpasswd.exe -bc .htpasswd novice novice
В результате будет создан файл .htpasswd, где будет лежать имя юзера и пароль в захэшированном алгоритмом md5 виде. Запустите эту комманду самостоятельно, чтобы узнать, что еще можно сделать с этим файлом. Например, можно генерировать не md5 хэш, а sha:
htpasswd.exe -bcs .htpasswd novice novice
Можно добавлять еще пользователей, которым будет разрешен доступ.
Кстати, забыл сказать: мы можем отрезать доступ к сайту для определенных IP адресов с помощью того же .htaccess. Или же разрешить доступ только для определенных адресов:
# разрешим доступ только для IP 127.0.0.1
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Это еще больше усилит нашу защиту. Как пользоваться этими директивами, описано в справке по Apache.
Итак, basic-аутентификацию делать научились. Теперь посмотрим, как мы можем залогиниться на сайт, где есть basic-аутентификация, с помощью php.
Basic-авторизация через PHP
Тут тоже ничего сложного нет. Привожу код функции, которая авторизуется по указанному адресу с указанными логином-паролем и возвращает контент сайта, доступный после авторизации:
<? function do_authorize($host, $uri, $user, $pwd) { $out = "GET $uri HTTP/1.1\r\n"; $out .= "Host: ".$host."\r\n"; $out .= "Connection: Close\r\n"; $out .= 'Authorization: Basic '.base64_encode($user.':'.$pwd)."\r\n"; $out .= "\r\n"; if (!$sock = @fsockopen($host, 80, $errno, $errstr, 10)) { return 0; } fwrite($sock, $out); $data = ''; while (!feof($sock)) { $data .= fgets($sock); } fclose($sock); return $data; } if ($source = do_authorize('localhost','/test.php', 'novice', 'novice')) { echo $source; } else { echo "I can't connect!"; } ?>
Я таким образом написал скрипт для проверки трафика у своего интернет-провайдера, который как раз предоставляет такую информацию через сайт с basic-аутентификацией, чтобы не лазить туда вручную постоянно.
Большой пост Занесу в закладки. С утра прочту 😉
Авторизация (англ. Authorization) — предоставление определённых полномочий лицу или группе лиц (прав доступа) на выполнение некоторых действий в различных системах с ограниченным доступом.
спасибо хороший пост
Огромное СПАСИБО и респект автору! все облазил… в поисках инфы об удаленной http авторизации, а тут даже скрипт! =)
Про авторизацию читал, мне интересно узнать как разрушить эту авторизацию. тоесть авторизировался, а потом при каких то условиях(например простоя) пришлось бы опять вводить логин пароль.
Сделал всё, как написано, но не работает.
Выдаёт ошибку 500
Только я файл паролей создавал вручную вбивал логин и пароль
Спасибо. Вот еще статья, в которой подробнее расписаны принципы базовой аутентификации, может кому пригодится: lifeexample.ru/razrabotka-i-optimizacia-saita/htaccess-zapretit-dostup.html
А где можно подробнее почитать?
после авторизации, как ходить по страницам, и как сохранять файлы?
Простите, но аутентификация - это процесс проверки, является ли лицо тем, за кого себя выдает.
Авторизация - это процесс проверки может ли объект получить доступ к запрашиваемому ресурсу.