Basic аутентификация и авторизация

Сегодня я хотел бы затронуть тему аутентификации и авторизации. Только не подумайте, что у этих двух слов одно и то же значение. Простыми словами, аутентификация – это когда кто-то проверяет тебя на наличие права доступа, а авторизация – это когда ты даешь себя на проверку права доступа (предоставление определенных прав определенному лицу).

Basic-аутентификация с помощью Apache

Почему Basic? Потому что бывает еще не только basic, но и digest и другие виды. Но мы их здесь касаться не будем, а коснемся наиболее простого вида аутентификации, который можно реализовать средствами сервера Apache.

Наверняка многие видели перед заходом в какую-нибудь личную область какого-то сайта следующее окно, выдаваемое браузером:

auth2 Basic аутентификация и авторизация

Мы тоже можем такое сделать! А как – читайте дальше.

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





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



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

  1. Fally
    Сентябрь 16th, 2008

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

  2. Klansi
    Октябрь 11th, 2008

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

  3. Dmiry
    Март 9th, 2010

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

  4. Роман
    Апрель 5th, 2011

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

  5. Иван
    Июнь 1st, 2011

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

  6. Александр
    Январь 13th, 2012

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

  7. Антон
    Февраль 15th, 2012

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

Оставить комментарий


© 2008 - 2012 i-novice.net | Все права защищены.