В чем сильные и слабые стороны HTTP digest-авторизации
Алексей Мичурин
Среди всех средств, предоставляемых протоколом HTTP, digest-авторизация
стоит особняком. Почему? Чем она отличается от вездесущей basic-авторизации?
Каковы её сильные и слабые стороны? Насколько хорошо она поддержана различным
ПО и когда уместно её использовать?
В протоколе HTTP предусмотрено два типа авторизации. Basic-модификация
получила весьма широкое распространение. «Системный администратор»
уже писал о нём (№5, 2005 г., 88-92 с.). Тогда были детально рассмотрены
связанные с авторизацией переменные окружения (AUTH_TYPE, REMOTE_USER,
REDIRECT_REQUEST_METHOD, REDIRECT_STATUS, REDIRECT_URL), особенности
взаимодействия механизмов авторизации и переадресации (в том числе при
обработке ошибок, возникающих в защищённых зонах). Эти детали одинаковы
для basic- и digest-процедур идентификации пользователей, и в
настоящей статье мы уже не будем останавливаться на этих вопросах, а полностью
сосредоточимся на специфике digest-авторизации.
Напомним только, что основным недостатком
basic-процедуры является передача пароля в открытом виде. Причём пароль
передаётся вновь и вновь при любом обращении к любому документу, находящемуся в
защищённой области. Это обстоятельство облегчает перехват пароля и делает
протокол ещё более уязвимым.
Кроме того, basic-авторизация не даёт возможности
«разлогиниться» – прервать сессию. Это естественное следствие того, что никакой
сессии и нет – прерывать просто нечего.
Basic-процедура не позволяет контролировать
количество неудачных попыток регистрации. То есть позволяет «взламывать» защиту
методом грубого подбора пароля.
Но существует и второй тип защиты –
digest-авторизация. Давайте разберёмся, как она работает и какие преимущества
даёт.
Digest-авторизация: диалог клиента
и сервера
В общих чертах процедура digest-авторизации немного сложнее basic. Диалоги
клиента и сервера весьма похожи. Однако при digest-авторизации пароль никогда
не передаётся по сети в открытом виде.
При первом обращении к защищённой области клиент,
естественно, не передаёт никакой идентификационной информации – он пока не
знает, что её необходимо передать.
Вот заголовки обычного HTTP-запроса:
GET /a-docs/
HTTP/1.1
Host:
127.0.0.1:9090
User-Agent: Mozilla/5.0
(X11; U; FreeBSD i386; en-US; rv:1.7.7) Gecko/20050420 Firefox/1.0.3
|