Защита админки и сайта при помощи дополнительной авторизации (.htaccess + .htpasswd)

Когда-то я уже писал пост о том, как заблокировать админку сайта по IP адресу. Способ конечно великолепен, если ваш IP — статичный и работаете над сайтом вы только в одном месте (скажем только дома или только в офисе).

Лично я, мало того, что часто переезжаю, так и ко всему прочему могу поколдовать над сайтом в макдаке или мне может понадобится зайти в админку, когда я на улице или в путешествии. Короче говоря, способ блокировки по IP мне не подходит.

Но что тогда делать? Ведь хочется как-то ещё защитить админку. Да так, чтобы вся директория /wp-admin была недоступна для посторонних.

Мне представляется хорошим вариантом поставить на сайте дополнительную авторизацию, используя связку .htaccess + .htpasswd.

Что ещё более удобно, вы можете применять эту блокировку не только к админке, но и ко всему сайту, например, если ваш сайт находится на стадии тестирования и вы никому не хотите его показывать раньше времени. Вот как это будет выглядеть (для Google Chrome, в разных браузерах по-разному):

защита сайта при помощи htpasswd
Всплывающее окно дополнительной авторизации на сайте.

Весь процесс будет состоять из двух шагов. Приступим.

.htaccess

В первую очередь создаём файл .htaccess в той директории сайта, которую хотим защитить паролем. Так как речь шла об админке WordPress, то создаем файл в папке /wp-admin.

AuthType Basic
#название аутентификации
AuthName "Protected Area"
#путь к файлу с пользователями и паролями .htpasswd
AuthUserFile /vol5/home/truemisha/truemisha.ru/public_html/wp-admin/.htpasswd
require valid-user
AuthName
Название авторизации. Сообщение будет отображаться в окошке ввода логина и пароля. Кроме того, для того, чтобы сохраненные пароли в браузерах сбросились, вы можете просто поменять это сообщение.
AuthUserFile
Абсолютный путь на сервере к файлу с логинами и паролями (как раз .htpasswd). Для того, чтобы узнать его, используйте PHP функцию getcwd() (Get Current Working Directory).

.htpasswd

Файл с пользователями и паролями вида пользователь:пароль. Пароль должен быть представлен в зашифрованном виде. Шифруем тут.

Пример:

admin:$apr1$gidPSkjR$qvsL5fMNunK2T17DKSxtR/
Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

По теме

Комментарии 30

  • Александра Вовк24 января 2015 в 11:01 #

    Отличный способ дополнительной защиты. Тоже пользуюсь htpasswd - и сама и клиентам рекомендую и настраиваю. Правда закрываю не весь каталог wp-admin, а только файл wp-login.php.

  • versusbassz3 февраля 2015 в 12:02 #

    При такой блокировке также блокируется файл /wp-admin/admin-ajax.php , к которому могут обращаться плагины через js с лицевой части сайта (например, ajax-отправка формы).

  • Виктор3 марта 2015 в 21:03 #

    А если закрывать только wp-login.php, как это все будет выглядеть? :)

  • Виталик4 марта 2015 в 13:03 #

    Тестировал на локальном сервере. Вроде все получилось, закрыл только файл wp-login.php. Но при входе, я лишь единожды ввел логин и пароль и после этого окно не появляется. Потом снова удалил код сохранил, потом снова вставил перезаписал и снова один раз ввел логин и пароль и больше окно не появляется. Скажите так и должно быть или это так на локальном сервере так?

    • versusbassz4 марта 2015 в 14:03 #

      Да, браузер запоминает введённые данные и использует их до момента своего закрытия (вроде бы, поправьте меня кто-нибудь, если я не прав).
      Если бы http-аутентификацию нужно было проходить на каждой странице это было бы... неудобно.

      • Виталик4 марта 2015 в 14:03 #

        Тогда это надежно и еще удобно! Интересно... Если вход в админку мы скрываем путем защиты "wp-admin" и "wp-login" способом выше, а файл конфигураций "config.php" скрываем (путем переноса его на директорию выше). Тогда стоит ли ставить какие-то плагины для защиты? (login-lockdown интересует) есть ли смысл его оставлять или убрать его лучше? Или он несет дополнительную защиту? подскажите

        • versusbassz4 марта 2015 в 22:03 #

          Я не ставлю, придерживаюсь принципа "сильный пароль решает все проблемы".

        • Миша5 марта 2015 в 01:03 #

          login-lockdown конечно будет нести дополнительную защиту, если предположить, что кто-то проникнет через htpasswd-аутентификацию и начнёт долбиться вам в админку.

  • Артем22 июня 2015 в 23:06 #

    Приветствую! Что будет после обновления ВП? Придеться по новой настраивать или эти файлы сохраняться?

  • Дмитрий28 января 2016 в 11:01 #

    в /wp-admin/ спрашивает пароль
    в /wp-admin/wp-login.php не спрашивает

    Почему такое может происходить?

    • Миша29 января 2016 в 10:01 #

      А потому что wp-login.php находится вне той самой папки и на него не распространяется защита. Но войти всё равно без авторизации не удастся.

  • Дмитрий29 января 2016 в 11:01 #

    Действительно, войти нельзя.
    Спасибо, Миша, за пояснение.

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Да, точно)

  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.