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-аутентификацией, чтобы не лазить туда вручную постоянно.






Сентябрь 16th, 2008
Большой пост
Занесу в закладки. С утра прочту
Октябрь 11th, 2008
Авторизация (англ. Authorization) — предоставление определённых полномочий лицу или группе лиц (прав доступа) на выполнение некоторых действий в различных системах с ограниченным доступом.
Март 9th, 2010
спасибо хороший пост
Апрель 5th, 2011
Огромное СПАСИБО и респект автору! все облазил… в поисках инфы об удаленной http авторизации, а тут даже скрипт! =)
Июнь 1st, 2011
Про авторизацию читал, мне интересно узнать как разрушить эту авторизацию. тоесть авторизировался, а потом при каких то условиях(например простоя) пришлось бы опять вводить логин пароль.
Январь 13th, 2012
Сделал всё, как написано, но не работает.
Выдаёт ошибку 500
Только я файл паролей создавал вручную вбивал логин и пароль
Февраль 15th, 2012
А где можно подробнее почитать?
после авторизации, как ходить по страницам, и как сохранять файлы?