Генератор htpasswd
Сгенерируйте строку .htpasswd с хешем SHA-1 прямо в браузере, получите готовый блок .htaccess для Apache 2.4 с Require valid-user и команду htpasswd для сервера.
Зачем нужен генератор .htpasswd
Файл .htpasswd — это простой текстовый файл, в котором лежат логины и хеши паролей для базовой аутентификации Apache. Он закрывает каталог, страницу или API одним словом «Require valid-user», без единой строчки кода. Проблема в другом: файл нельзя придумать на лету, пароль надо захешировать, а на сервере для этого обычно стоит Apache. Если htpasswd Apache под рукой нет, а задача срочная, остаётся считать хеш в браузере — именно это и делает этот htpasswd generator. Здесь получается строка файла и готовый блок .htaccess, который можно положить рядом и сразу заработать. Сразу оговорка: то, что считается в браузере, — это SHA-1, а для новых сайтов правильный выбор bcrypt, и его считают на сервере.
Что умеет генератор
- Ввод логина и пароля с проверкой: двоеточие и пробелы в логине недопустимы
- Расчёт хеша SHA-1 в браузере через Web Crypto и выдача строки вида «логин:{SHA}…» — тем же алгоритмом, что и в генераторе SHA-1
- Режим bcrypt с готовой командой htpasswd, потому что в браузере его считать дорого
- Готовый блок .htaccess для Apache 2.4 с Require valid-user и путём к файлу паролей
- Копирование строки, команды и блока в буфер обмена в один клик, плюс генератор паролей для самого пароля
Как получить файл паролей
- Введите логин и пароль, при желании сгенерируйте случайный пароль кнопкой рядом
- Выберите алгоритм: SHA-1 считается здесь, bcrypt — на сервере
- Нажмите «Сгенерировать строку htpasswd» и скопируйте результат
- Положите строку в файл .htpasswd на сервере и добавьте блок .htaccess из раздела ниже
Из чего состоит строка .htpasswd
Формат предельно простой: одна строка на пользователя, логин, двоеточие, хеш, перевод строки. Строки, которые начинаются с решётки, считаются комментариями и игнорируются. Сама строка не шифруется, а хешируется, и алгоритм задаётся префиксом. Схема {SHA} означает SHA-1, записанный в base64 — тем же способом считает и инструмент для SHA-1, а про несколько хешей разом есть отдельная страница: ровно 28 символов после префикса, это 20 байт хеша. Схема $apr1$ — это Apache MD5, вариант crypt с собственной солью и тысячей итераций. Схемы $2y$, $2a$ и $2b$ — это bcrypt, где соль и стоимость встроены в саму строку. Проверка пароля делается на сервере: Apache читает файл, находит строку по логину, применяет указанный алгоритм к введённому паролю и сравнивает результат.
Форматы паролей, которые понимает Apache
| Схема | Как выглядит строка | Комментарий |
|---|---|---|
| {SHA} | admin:{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g= | SHA-1 в base64, без соли, устаревший формат |
| $apr1$ | admin:$apr1$<соль>$<хеш> | Apache MD5, своя соль и тысяча итераций |
| $2y$ | admin:$2y$05$<22 символа соли><31 символ хеша> | bcrypt, стоимость задаётся ключом -C |
| $2a$ | admin:$2a$05$<соль><хеш> | bcrypt, старая запись варианта, попадается у сборок PHP |
| $2b$ | admin:$2b$05$<соль><хеш> | bcrypt, текущий вариант с исправлениями в коде |
| Открытый текст | admin:secret | Apache не считает это паролем, такая строка утечёт сама |
| Комментарий | # служебная строка | Строки с решёткой игнорируются при чтении файла |
В примерах со схемами $2y$, $2a$ и $2b$ показана структура строки, а не настоящий хеш: подставить можно только результат, полученный на сервере.
Где htpasswd нужнее всего
Первый сценарий — закрыть служебный раздел сайта: статистика, бэкапы, админка, черновики, API с ключом. Второй — закрыть отдельный каталог на статическом хостинге, где нет ни PHP, ни панели управления, и единственный доступный механизм это .htaccess. Третий — поднять временный доступ к материалам для клиента или подрядчика на несколько дней и потом отозвать его одной правкой файла. Четвёртый — устаревшее приложение, которому нужен файл паролей в формате, который ожидает конкретная программа, а не сам Apache.
Отдельно стоит вариант с htpasswd Apache на уровне сервера, а правила для .htaccess разобраны в подробной инструкции по .htaccess: когда нужно завести учётную запись для скрипта или для CI, которая ходит на сайт по basic-аутентификации. Тогда файл паролей становится машинным секретом, и к нему предъявляются требования к хранению, как к любому паролю. В таких случаях удобнее сгенерировать файл на сервере и отдать его в менеджер секретов, а не держать в репозитории. Про генератор .htaccess — там собираются правила редиректов, HTTPS и запрета доступа, которые обычно идут в одном файле.
- Закрыть служебный каталог: статистика, бэкапы, черновики
- Защита папки на статическом хостинге, где нет других механизмов
- Временный доступ к материалам для клиента или подрядчика
- Учётные записи для скриптов, CI и мониторинга
- Совместимость со старым приложением, ждущим готовый файл паролей
Частые ошибки при настройке htpasswd
Самая частая — перенести блок из Apache 2.2 на сервер 2.4 и удивляться, что защита не работает или, наоборот, пускает всех. Второе место — указать в AuthUserFile относительный путь или путь от каталога сайта: Apache ждёт абсолютный путь от корня файловой системы. Третье — забыть про права на файл и положить его в общий каталог, доступный по HTTP, тогда файл паролей скачает кто угодно.
Дальше — попытка угадать пароль по схеме {SHA}: это безнадёжно, потому что функция односторонняя. Ещё ошибка — сгенерировать строку с паролем в открытом виде и записать её в файл: Apache её не примет. И последняя — забыть про HTTPS: при basic-аутентификации логин и пароль передаются в base64, то есть почти в открытом виде, и без шифрования канала их перехватят по дороге. Пароль по HTTPS всё равно стоит передавать, но он хотя бы не лежит на проводе.
- Перенести блок с Order и Deny на сервер Apache 2.4
- Указать в AuthUserFile относительный путь
- Положить файл паролей в каталог, доступный по HTTP
- Пытаться подобрать пароль, зная его SHA-1
- Включить basic-аутентификацию без HTTPS
Разбор примера: как собрать работающую связку
Шаг первый — пароль. Вводим его в поле и получаем строку вида admin:{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=. Это base64 от двадцати байт хеша SHA-1, и именно в таком виде Apache ожидает увидеть пароль в файле. Логин в строке пишется ровно тот, который вводили при входе, и двоеточие в нём использовать нельзя — иначе строка распадётся на части не там.
Шаг второй — файл на сервере. Создаём его командой htpasswd -c, вставляем сгенерированную строку, ставим права 640 и выдаём владельца веб-серверу. Шаг третий — .htaccess рядом с защищаемым каталогом: четыре директивы, Require valid-user, и путь к файлу паролей. Шаг четвёртый — проверка: открыть защищённый адрес и убедиться, что сервер спросил логин и что вход работает.
Что происходит на каждом шаге
| Шаг | Действие | Результат |
|---|---|---|
| 1 | Ввод логина и пароля | проверяется, что в логине нет двоеточия и пробелов |
| 2 | Подсчёт хеша | Web Crypto даёт 20 байт SHA-1 от пароля в UTF-8 |
| 3 | Кодирование в base64 | 20 байт превращаются в 28 символов с «=» на конце |
| 4 | Сборка строки | логин, двоеточие, префикс {SHA} и хеш |
| 5 | Запись в файл | строка кладётся в .htpasswd на сервере |
| 6 | Указание пути | AuthUserFile получает абсолютный путь к файлу |
| 7 | Права доступа | 640 на файл и 750 на каталог, владелец — веб-сервер |
| 8 | Проверка входа | Apache запрашивает пароль и сверяет хеш |
Шаги с второго до четвёртого выполняет браузер, остальное — на сервере, где Apache и должен проверять пароль.
Apache 2.2 и 2.4, Require и Order, HTTP и HTTPS
Главное отличие между поколениями Apache — в синтаксисе авторизации. В 2.2 доступ описывался списком правил: Order allow,deny задавал порядок просмотра, Allow from all или Deny from перечисляли адреса, а замыкала всё конструкция Require. В 2.4 осталась только Require, и правила применяются одновременно, а не по очереди. Отсюда практический совет: если сервер на 2.4, берите Require valid-user, если на 2.2 — не выбрасывайте Order и Deny, пока не переехали.
Второе отличие — транспорт. Basic-аутентификация отправляет логин и пароль в заголовке Authorization, закодированные в base64, то есть без всякого шифрования. По HTTP это значит, что пароль виден любому, кто слушает канал. HTTPS здесь не улучшение, а обязательное условие: иначе защита работает только против тех, кто не читает сеть. Третье отличие касается формата файла: Apache 2.4 умеет работать и с файлами паролей, созданными в других программах, — тут важно только, чтобы схема хеша была той, которую сервер умеет проверять.
- Apache 2.4: Require valid-user вместо Order, Allow и Deny
- Apache 2.2: старый синтаксис ещё обязателен до перехода
- Basic-аутентификация без HTTPS передаёт пароль почти в открытом виде
- Формат файла паролей должен совпадать с тем, что умеет проверять сервер
- Схема {SHA} без соли выдаёт одинаковые хеши для одинаковых паролей
Частые вопросы про htpasswd и Apache
Почему bcrypt считается на сервере, а не в браузере?
Что такое Require valid-user и почему не Order и Deny?
Чем bcrypt лучше SHA-1 для паролей?
Как правильно узнать пароль, если в .htpasswd лежит SHA-1?
Куда класть .htpasswd и какие права ставить?
Можно ли хранить пароль в открытом виде?
Почему при входе на сайт Apache отвечает кодом 500?
Как заменить пароль существующему пользователю?
Похожие инструменты
Генератор robots.txt
Соберите robots.txt для своего сайта: правила обхода, запрет служебных папок, Clean-param и Host для Яндекса, строка Sitemap
Генератор sitemap.xml
Соберите валидный sitemap.xml из списка URL или CSV: lastmod, changefreq, priority, проверка лимитов и скачивание файла
Генератор favicon
Сделайте иконку сайта из монограммы или своей картинки: favicon.ico, apple-touch-icon, android-chrome-192 и 512, site.webmanifest и готовый HTML-код
Генератор JSON Schema
Постройте черновую JSON Schema по примеру JSON: типы полей, required, вложенные объекты и массивы
Генератор регулярных выражений
Соберите регулярное выражение по шаблону задачи или разберите своё выражение на конструкции
Генератор Open Graph
Соберите теги og:title, og:description, og:image и Twitter Card для превью ссылки в соцсетях
Таблица ASCII-кодов
Полный справочник ASCII: коды 0–127 в DEC, HEX, OCT и BIN с поиском по символу или коду
Тестер и отладчик регулярных выражений
Тестируйте регулярные выражения с подсветкой совпадений, группами и частыми паттернами