Безопасна ли базовая аутентификация доступа?

Используя Apache, довольно просто настроить страницу, которая использует базовую аутентификацию доступа, чтобы запрашивать у пользователя имя / пароль и каким-либо образом использовать эти учетные данные для предоставления доступа этому пользователю.

Это безопасно, если соединение между клиентом и сервером безопасно?


person Nathan Osman    schedule 24.07.2010    source источник
comment
См. также: Безопасна ли BASIC-Auth, если выполняется по HTTPS?   -  person KyleMit    schedule 04.08.2018


Ответы (6)


Беспокойство по поводу базовой аутентификации заключается в том, что учетные данные отправляются в виде открытого текста и уязвимы для перехвата пакетов, если это соединение защищено с помощью TLS / SSL, то оно так же безопасно, как и другие методы, использующие шифрование.

person Chris Diver    schedule 24.07.2010
comment
Еще одно отличие: пароль отправляется повторно для каждого запроса. (Увеличенное окно атаки) См. security.stackexchange.com/a/990/95555 - person Nateowami; 28.04.2017
comment
так это безопасно или нет? :-D - person BG BRUNO; 12.12.2018
comment
@BGBruno мои 2 цента: если вы не используете SSL, это небезопасно. Если вы используете SSL, это будет зависеть от вашего приложения. Одноразовые запросы REST - это нормально, ИМХО, если есть другие меры безопасности на стороне сервера (например, чтобы избежать DoS-атак или атак грубой силы). Однако для более сложных сценариев аутентификации лучше использовать что-нибудь более сложное. Например, вам определенно не следует использовать его в качестве входа на свой веб-сайт. - person lotif; 13.03.2019
comment
thx @lotif - я давно изучаю эту тему и пока использую # jwt + xcsrf - person BG BRUNO; 15.03.2019

Это старая ветка, и я не считаю, что ответ, получивший наибольшее количество голосов / избранных, является правильным.

Как отмечает @Nateowami, обмен стеками безопасности ветка описывает ряд проблем с базовой аутентификацией.

Хочу отметить еще один: если вы правильно проверяете свой пароль, то базовая аутентификация делает ваш сервер более уязвимым для отказа в обслуживании. Почему? Раньше считалось, что для проверки пароля достаточно соленого хеша. Это больше не так. В настоящее время мы говорим, что вам нужны медленные функции, чтобы предотвратить перебор паролей в случае, если база данных станет уязвимой (что случается слишком часто). Если вы используете базовую аутентификацию, вы заставляете свой сервер выполнять эти медленные вычисления при каждом вызове API, что создает большую нагрузку на ваш сервер. Вы делаете его более уязвимым для DoS, просто используя этот устаревший механизм аутентификации.

В более общем плане пароли имеют более высокую ценность, чем сеансы: компрометация пароля пользователя позволяет захватить учетную запись пользователя на неопределенный срок, не говоря уже о возможности взлома других систем, к которым пользователь получает доступ, из-за повторного использования пароля; тогда как сеанс пользователя ограничен по времени и ограничен одной системой. Следовательно, в целях глубокой защиты ценные данные, такие как пароли, не должны использоваться повторно, если в этом нет необходимости. Базовая проверка подлинности - устаревшая технология, и ее не рекомендуется использовать.

person TheGreatContini    schedule 04.09.2017
comment
Разве это не относится к большинству механизмов авторизации? Например, аутентификация на основе токена. Сервер должен проверять подпись токена при каждом запросе, который обычно представляет собой смесь RSA и SHA2 или только SHA2 ... - person Genfood; 08.05.2021

Причина, по которой большинство сайтов предпочитают OAuth, а не Basic Auth, заключается в том, что Basic Auth требует, чтобы пользователи вводили свой пароль в стороннем приложении. Это стороннее приложение должно хранить пароль в открытом виде. Единственный способ отозвать доступ - это изменить пароль пользователя. Однако это отменит доступ для всех сторонних приложений. Итак, вы можете увидеть, в чем проблема.

С другой стороны, для OAuth требуется веб-фрейм. Пользователь вводит свои данные для входа на страницу входа на этот конкретный сайт. Затем сайт генерирует токен доступа, который приложение может использовать для аутентификации в будущем. Плюсы:

  • токен доступа может быть отозван
  • стороннее приложение не может видеть пароль пользователя
  • токену доступа могут быть предоставлены определенные разрешения (тогда как базовая аутентификация обрабатывает всех потребителей одинаково).
  • если стороннее приложение оказывается небезопасным, поставщик услуг может принять решение отозвать все токены доступа, созданные для этого конкретного приложения.
person elslooo    schedule 04.09.2014
comment
Я согласен со всеми пунктами, кроме предоставления определенного разрешения, ничто не мешает третьему приложению видеть пользователя, используемого в базовой аутентификации, и тем самым предоставлять определенные разрешения для этой комбинации пользователя / пароля. - person vasilevich; 16.02.2018
comment
Также вы обычно можете отозвать базовую аутентификацию, отправив ответный код 401 и попросив пользователя повторно пройти аутентификацию ... - person Mikkel Løkke; 15.06.2021

Базовая аутентификация по http в среде, которую можно обнюхать, похожа на отсутствие аутентификации, потому что пароль можно легко изменить, а затем использовать повторно. В ответ на язвительный комментарий выше о том, что кредитные карты по ssl "немного" безопаснее, проблема в том, что базовая аутентификация используется снова и снова по одному и тому же каналу. Если вы однажды скомпрометируете пароль, вы поставите под угрозу безопасность каждой транзакции по этому каналу, а не только одного атрибута данных.

Если бы вы знали, что будете передавать один и тот же номер кредитной карты во время веб-сеанса снова и снова, я бы надеялся, что вы придумали бы какой-то другой контроль, помимо простого использования SSL, потому что есть вероятность, что использовался номер кредитной карты что часто будет скомпрометировано ... в конце концов.

person phydroxide    schedule 25.02.2016
comment
SSL безопасен независимо от того, сколько раз вы его используете. Многократное использование не увеличивает вероятность компрометации информации. - person MobileMon; 15.01.2018
comment
Проблема со всеми этими комментариями заключается в том, что базовая аутентификация сама по себе не содержит свойств безопасности. Предположим, что злоумышленник находится за завершением SSL, и аргумент уходит. Токен сеанса с истекающим сроком действия может быть украден, но он действителен только в течение x периода времени. Базовая аутентификация имеет токен, который всегда работает, когда он известен, и поэтому его необходимо вручную менять так же часто, как токен с истекающим сроком действия, чтобы иметь такое же свойство безопасности. - person phydroxide; 01.10.2018

Если вы генерируете пароли с htpasswd, подумайте о переходе на htdigest.

Дайджест-проверка подлинности безопасна даже для незашифрованных соединений, и ее так же легко настроить. Конечно, обычная аутентификация - это нормально, когда вы переходите по ssl, но зачем рисковать, если вы можете так же легко использовать дайджест-аутентификацию?

person jwsample    schedule 24.07.2010
comment
Если он зашифрован, то нет причин использовать дайджест вместо базовой аутентификации, нет никакого «шанса». Если соединение не зашифровано, дайджест-аутентификация предотвратит раскрытие пароля пользователя и предотвратит повторные атаки, но данные будут отправляться в виде обычного текста, я бы вряд ли назвал это «безопасным даже для незашифрованных соединений». - person Chris Diver; 24.07.2010
comment
Вероятность больше похожа на неправильно настроенный сервер, позволяющий кому-то получить доступ к странице в незашифрованном виде, или на пользователя, который делает это случайно. Вопрос не в том, лучше ли передавать информацию по ssl или в открытом виде. Базовая проверка подлинности находится на самом низком уровне с точки зрения стандартов безопасности проверки подлинности по паролю. Есть причина, по которой вы не часто видите это в дикой природе. - person jwsample; 24.07.2010
comment
Интересно, что вообще лучше. Базовый может быть на уровне веб-сервера, поэтому он довольно низкий и значительно сокращает области по сравнению с тем, что, например, Jenkins обрабатывает аутентификацию (которая может открывать столько URL-адресов, сообщений и т. Д., Доступа и возможных ошибок). Итак, что лучше для таких случаев (только за пределами https). - person Wernight; 18.07.2013
comment
Дайджест-аутентификация безопасна даже для незашифрованных соединений - False. Можно просто передать хеш-код, чтобы украсть личность, не зная пароля. Кроме того, большинство хэшей паролей легко отменить с помощью поиска в таблицах (можно даже сделать это с помощью Google), радужных таблиц или недорогого брутфорса с помощью графического процессора. - person TheGreatContini; 05.09.2017

Как следует из названия, «Базовая аутентификация» - это просто базовый механизм безопасности. Не полагайтесь на него, чтобы обеспечить вам беспроблемную безопасность.

Использование SSL над ним делает его немного более безопасным, но есть более эффективные механизмы.

person SoftwareGeek    schedule 24.07.2010
comment
Значит, отправка данных кредитной карты через SSL «немного безопаснее», чем простой текст? - person Chris Diver; 24.07.2010
comment
@Chris Diver - что ты имеешь в виду? - person SoftwareGeek; 24.07.2010
comment
Базовые кредиты аутентификации представляют собой открытый текст через SSL, точно так же, как отправка номера вашей кредитной карты через HTTP POST является открытым текстом через SSL. Таким образом, использование SSL (в наши дни TLS) делает его безопасным во время транспортировки. - person Chaos; 30.01.2017