Базовая HTTP-аутентификация для доступа к админке сайта

Привет! Сегодня я расскажу вам об одном из способов защиты консоли администратора WordPress от Brute-force атаки и несанкционированного доступа к файлу wp-login.php с помощью .htaccess. Брутфорс представляет собой метод полного перебора паролей — это один из видов хакерской атаки на сайт.

Basic HTTP-авторизация

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

Два-три года назад, если мне не изменяет память, в течение продолжительного времени на сайты WordPress (а также другие популярные CMS) велась массированная Brute-force атака и большинство сайтов не выдерживало нагрузки. Мои сайты, расположенные на виртуальном хостинге, нередко стали выдавать 500 ошибку.

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

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

Уведомляем вас, что использование CPU приближается к максимально допустимой суточной нагрузке. Для обеспечения бесперебойной работы сайтов предлагаем повысить тарифный план или рассмотреть вариант перехода на VPS сервер.

Что интересно, посещаемость по данным Метрики оставалась на уровне предыдущих дней. А вот логи сервера сразу указали на причину — буквально каждую секунду с одного и того же IP шли запросы к админке. Естественно, я заблокировал доступ к сайту с этого IP-адреса через .htaccess таким образом:

Order Allow,Deny
Allow from All 
Deny from xxx.xxx.xxx.xxx

Где xxx.xxx.xxx.xxx — IP злоумышленника, вычисленный по журналу логов. В тот же день я отправил своему хостинг-провайдеру ответное письмо, в котором сообщил об атаке на мои сайты и принятых мерах по снижению нагрузки на сервер. Таким образом мне не пришлось повышать тарифный план и удалось избежать лишних финансовых затрат.

Защита файла wp-login.php паролем от взлома

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

<Files wp-login.php>
AuthType Basic
AuthName "please use your login and password"
AuthUserFile "/var/www/u12345/data/etc/.htpasswd"
Require valid-user
</Files>

WordPress является самой популярной CMS и поэтому часто становится мишенью хакерской атаки. Добавьте эти строки в свой файл .htaccess чтобы защитить сайт от взлома и повысить его безопасность.

Данная защита включает обязательное требование ввода дополнительного логина и пароля для доступа к файлу wp-login.php, исключая отправку POST-запросов при подборе пароля к админ-панели сайта. Здесь используются параметры:

  • AuthType — тип аутентификации, в нашем случае Basic — базовый,
  • AuthName — эту фразу видит пользователь, можете её заменить,
  • AuthUserFile — путь к файлу с логином и паролем,
  • Require — требования, valid-user разрешает доступ пользователям из AuthUserFile.

Путь к файлу с логином и паролем является абсолютным и отличается в зависимости от хостинга. Обратитесь за помощью к техподдержке или изучите справку, чтобы узнать путь к корневому каталогу. В моём примере файл называется .htpasswd. Содержимое файла представлено парой логин:пароль и имеет следующий вид:

login:zQh1Y7lpTrkA5

Мой хостинг-провайдер рекомендует пользоваться сервисом Htpasswd Generator для онлайн-генерации хэша пароля. Указываем логин, который хотим использовать для HTTP-аутентификации, затем пароль для его хэширования в MD5.

Важно: пароль в файле .htpasswd не должен быть указан в открытом виде, используйте его хэш с применением алгоритма шифрования MD5.

После нажатия кнопки «Create .htpasswd file» на выходе получаем нужную связку, которую следует скопировать и вставить в файл .htpasswd. Вот и всё, настройка защиты файла wp-login.php завершена. Теперь, прежде чем получить доступ к консоли администратора нам потребуется указать дополнительные логин и пароль (именно пароль, а не его хэш).

Basic HTTP Authentication

Внешний вид формы доступа отличается в зависимости от браузера и операционной системы пользователя. Наиболее симпатичным мне показалось окно авторизации в Internet Explorer, в остальных браузерах оно более сдержано и лаконично, без излишеств.

Используйте разные логины и пароли для HTTP-авторизации и входа в консоль WordPress! Это первая статья из серии уроков по защите сайта от взлома, в планах сформировать новую рубрику про безопасность. Продолжение следует…

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
(5 голосов, в среднем: 5 из 5)
  1. Александр

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

    Ответить

  2. Webliberty

    Александр, может пароль слабый и пробивает защиту подбором логина и пароля по словарю?

    Ответить

  3. IT-Tehnik

    Хороший материал, но хотел добавить, что в этой строке надо использовать одинарные кавычки:

    AuthUserFile '/var/www/u12345/data/etc/.htpasswd'

    Ответить

  4. Webliberty

    IT-Tehnik, спасибо за замечание! Действительно, иногда использование двойных кавычек может привести к ошибке. Я по-разному использую, сейчас с двойными и все работает, видимо это в первую очередь зависит от настроек сервера.

    Ответить

  5. Алексей

    Спасибо Денис за интересную статью! Я ничего такого не делал но двойная аутентификация уже присутствует. Я про нее как то уже писал. В начале когда она у меня появилась я испугался и подумал что может быть что-то не так. Но потом успокоился, узнав что это сделано для безопасности 🙂

    Ответить

  6. Webliberty

    Алексей, привет! Да, у тебя тоже наверное хостер прописал эти строки в целях повышения безопасности. Крупные массовые атаки на сайты проходят практически регулярно, лишней такая защита блога на WordPress уж точно не будет)

    Ответить

  7. Артем

    Раньше как-то не придавал значения защите блога… сейчас считаю, что это то, чему нужно обязательно уделять внимание. Буду пользоваться!

    Ответить

  8. Михаил Ats

    А на Вашем хосте разве нет банальной двухфакторной аутентификации со всякими там смс-ками?

    Ответить

  9. Webliberty

    Михаил, у меня вход по одноразовому паролю из смс осуществляется при доступе к личному кабинету регистратора домена и хостинг-провайдера. В данном случае речь идет про доступ в панель администрирования WordPress.

    Ответить

  10. Михаил ATs

    Ну, да! …это я буксанул (своё в голове варилось) — осознал уже после отправки коммента!

    Это я на Вашу эту статью зашел и зарапортовался. А узнать хотел вот о чём (немного не в тему статьи, но…) — у Вас используется синтаксис (для подсветки кода) не обращали внимания как он ведёт себя на Опере Мини? Строки кода кое-где размером увеличены…

    Ответить

  11. Webliberty

    Михаил, не проверял в этом браузера, спасибо за сообщение, обязательно посмотрю что можно сделать. Насколько я помню, Опера Мини прогоняет весь трафик через свои сервера и сжимает данные, возможно в этот момент и происходит искажение…

    Ответить

  12. Кирилл

    Заинтересовался, защиты много не бывает. Возник такой вопрос. Я же могу через ftp сам создать файл с логином и паролем и прикрутить эту настройку?

    Ответить

  13. Webliberty

    Кирилл, можно и по FTP все сделать, нужен только доступ к файлам. Попробуйте, поделитесь своим опытом — получится или нет 😉

    Ответить

  14. Кирилл

    Webliberty, я сделал все как надо. Правда после того, как я неправильно ввел пароль, он вообще перестал даже показывать мне форму, вместо нее сразу 500 ошибка. Буду разбираться дальше

    Ответить

  15. Сергей

    А что вы скажите по поводу плагина Login LockDown. Он вроде бы делает тоже самое, что описано в статье.

    Ответить

  16. Webliberty

    Сергей, плагин выполняет иные более расширенные задачи — защита от перебора паролей путем блокирования подозрительных попыток входа с одного IP адреса.

    Ответить

:) ;) :D :( :cry: :| :o :P 8-) :oops: :roll: :idea:

Отправляя комментарий, вы соглашаетесь с политикой конфиденциальности.