Формат файла .htpasswd
Одна строка на пользователя: имя, двоеточие и хеш пароля. Префикс хеша сообщает серверу алгоритм: $2y$ — bcrypt, $apr1$ — MD5 по схеме Apache, {SHA} — SHA-1 в Base64. Файл должен читаться процессом веб-сервера, но лежать вне корня сайта, например /etc/nginx/.htpasswd с правами 640 и группой www-data.
Basic auth и HTTPS
Браузер отправляет логин и пароль в заголовке Authorization в Base64 при каждом запросе — это кодирование, а не шифрование. Включайте basic auth только поверх HTTPS и не используйте для этого пароль от других сервисов.
Частые вопросы
Какой алгоритм выбрать для .htpasswd?
bcrypt, если сервер его поддерживает: Apache 2.4.4+ и nginx на системах с libxcrypt (Debian 11+, Ubuntu 22.04+, RHEL 9) или musl (Alpine). apr1 работает везде, но это MD5 с 1000 итераций — подбирается намного быстрее. {SHA} использовать не стоит.
Какую стоимость bcrypt поставить?
Для basic auth хватает 10–12. Каждая единица удваивает время проверки, а nginx проверяет пароль при каждом запросе с заголовком Authorization, так что 14 заметно нагрузит сервер под трафиком.
Пароль действительно не отправляется на сервер?
Да. Хеш считается JavaScript-кодом страницы (bcryptjs и Web Crypto API), сетевых запросов с паролем нет, в URL и хранилище браузера он не попадает. Проверить можно во вкладке Network инструментов разработчика.
Как добавить пользователя в существующий файл?
Допишите строку в конец файла (echo 'user:hash' >> /etc/nginx/.htpasswd) или используйте htpasswd без -c — флаг -c создаёт файл заново и удаляет остальных пользователей. После изменения перезагружать nginx не нужно: файл читается при каждом запросе.
