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





Читайте также:



9 Ответов на “Basic аутентификация и авторизация”

  1. Fally

    Большой пост :) Занесу в закладки. С утра прочту 😉

  2. Klansi

    Авторизация (англ. Authorization) — предоставление определённых полномочий лицу или группе лиц (прав доступа) на выполнение некоторых действий в различных системах с ограниченным доступом.

  3. спасибо хороший пост

  4. Роман

    Огромное СПАСИБО и респект автору! все облазил… в поисках инфы об удаленной http авторизации, а тут даже скрипт! =)

  5. Иван

    Про авторизацию читал, мне интересно узнать как разрушить эту авторизацию. тоесть авторизировался, а потом при каких то условиях(например простоя) пришлось бы опять вводить логин пароль.

  6. Сделал всё, как написано, но не работает.
    Выдаёт ошибку 500
    Только я файл паролей создавал вручную вбивал логин и пароль

  7. Спасибо. Вот еще статья, в которой подробнее расписаны принципы базовой аутентификации, может кому пригодится: lifeexample.ru/razrabotka-i-optimizacia-saita/htaccess-zapretit-dostup.html

  8. А где можно подробнее почитать?
    после авторизации, как ходить по страницам, и как сохранять файлы?

  9. Денис

    Простите, но аутентификация - это процесс проверки, является ли лицо тем, за кого себя выдает.
    Авторизация - это процесс проверки может ли объект получить доступ к запрашиваемому ресурсу.


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map