Все статьи

Basic Authentication: как простейший способ аутентификации работает в HTTP

HTTP Basic Authentication — один из старейших и простейших способов защитить ресурс паролем: браузер запрашивает логин и пароль, и они передаются на сервер в составе каждого запроса. Простота этого механизма одновременно и его главная слабость.

Как формируется заголовок Authorization

Логин и пароль объединяются через двоеточие (логин:пароль), после чего вся строка кодируется в Base64 и добавляется в заголовок Authorization: Basic <закодированная_строка>. Браузер автоматически добавляет этот заголовок к каждому следующему запросу после первой успешной авторизации.

Почему Base64 — это не безопасность

Base64 — это схема кодирования, а не шифрование: любой человек может декодировать строку обратно в логин:пароль за секунды, без какого-либо ключа. Если запрос перехватить (например, через незащищённый Wi-Fi), учётные данные становятся доступны злоумышленнику мгновенно.

Кириллица в логине и пароле

Base64 кодирует не символы, а байты, поэтому важна кодировка исходной строки. Кириллический символ в UTF-8 занимает 2 байта против 1 байта у латинской буквы, так что пароль вроде пароль123 даёт заметно более длинный Base64-токен, чем визуально такой же по числу символов латинский аналог. До RFC 7617 (2015) спецификация Basic Auth вообще не определяла кодировку логина и пароля — это создавало путаницу для корпоративных систем на кириллице (например, 1С-Битрикс с логинами вида ivan.petrov или прямо кириллицей), где разные HTTP-клиенты могли по-разному интерпретировать non-ASCII символы до декодирования.

Зачем это нужно

  • Быстро защитить паролем staging-сервер или внутренний инструмент на этапе разработки.
  • Сформировать корректный заголовок Authorization для ручного тестирования API через curl или Postman.
  • Понять, почему Basic Auth без HTTPS считается серьёзной уязвимостью.

В Basic Auth нет штатного механизма выхода

Браузер кэширует учётные данные и автоматически добавляет заголовок Authorization к каждому следующему запросу на тот же origin, пока вкладка не будет закрыта — стандартной кнопки «выйти» протокол не предусматривает. Чтобы принудительно «разлогинить» пользователя, серверы идут на хитрости: намеренно возвращают 401 с другим значением realm или полагаются на то, что пользователь сам закроет все вкладки браузера.

Попробовать инструмент