Базовая HTTP-аутентификация для доступа к админке сайта
Привет! Сегодня я расскажу вам об одном из способов защиты консоли администратора WordPress от Brute-force атаки и несанкционированного доступа к файлу wp-login.php с помощью .htaccess. Брутфорс представляет собой метод полного перебора паролей — это один из видов хакерской атаки на сайт.
Злоумышленник с помощью специального программного обеспечения запрашивает доступ к файлу авторизации и POST-запросами подбирает пару логин-пароль. Как правило, подбор идёт по словарю, поэтому крайне важно использовать длинный сложный пароль, состоящий из цифр, букв верхнего и нижнего регистра, специальных символов.
Два-три года назад, если мне не изменяет память, в течение продолжительного времени на сайты WordPress (а также другие популярные CMS) велась массированная Brute-force атака и большинство сайтов не выдерживало нагрузки. Мои сайты, расположенные на виртуальном хостинге, нередко стали выдавать 500 ошибку.
В один прекрасный день я получил письмо на электронную почту с уведомлением о возрастании предельной нагрузки на сервер с предложением оптимизировать сайты или перейти на более дорогой тарифный план, иначе услугу хостинга заблокируют за превышение лимитов текущего тарифа:
Что интересно, посещаемость по данным Метрики оставалась на уровне предыдущих дней. А вот логи сервера сразу указали на причину — буквально каждую секунду с одного и того же 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 для онлайн-генерации хэша пароля. Указываем логин, который хотим использовать для HTTP-аутентификации, затем пароль для его хеширования, например, в MD5 или любом другом алгоритме.
После нажатия кнопки «Генерировать» на выходе получаем нужную связку, которую следует скопировать и вставить в файл .htpasswd. Вот и всё, настройка защиты файла wp-login.php завершена. Теперь, прежде чем получить доступ к консоли администратора нам потребуется указать дополнительные логин и пароль (именно пароль, а не его хэш).
Внешний вид формы доступа отличается в зависимости от браузера и операционной системы пользователя. Наиболее симпатичным мне показалось окно авторизации в Internet Explorer, в остальных браузерах оно более сдержано и лаконично, без излишеств.
Используйте разные логины и пароли для HTTP-авторизации и входа в консоль WordPress! Это первая статья из серии уроков по защите сайта от взлома, в планах сформировать новую рубрику про безопасность. Продолжение следует…
Я тоже сделал себе двойную аутентификацию на сайте, а то раньше в день по несколько отчётов приходило, что кто-то пытался войти в админ панель. Сейчас по одному отчёту приходит, а бывает и не одного. Не пойму, это двойная аутентификация что ли не всегда срабатывает?
Ответить
Александр, может пароль слабый и пробивает защиту подбором логина и пароля по словарю?
Ответить
Хороший материал, но хотел добавить, что в этой строке надо использовать одинарные кавычки:
AuthUserFile '/var/www/u12345/data/etc/.htpasswd'
Ответить
IT-Tehnik, спасибо за замечание! Действительно, иногда использование двойных кавычек может привести к ошибке. Я по-разному использую, сейчас с двойными и все работает, видимо это в первую очередь зависит от настроек сервера.
Ответить
Спасибо Денис за интересную статью! Я ничего такого не делал но двойная аутентификация уже присутствует. Я про нее как то уже писал. В начале когда она у меня появилась я испугался и подумал что может быть что-то не так. Но потом успокоился, узнав что это сделано для безопасности 🙂
Ответить
Алексей, привет! Да, у тебя тоже наверное хостер прописал эти строки в целях повышения безопасности. Крупные массовые атаки на сайты проходят практически регулярно, лишней такая защита блога на WordPress уж точно не будет)
Ответить
Раньше как-то не придавал значения защите блога… сейчас считаю, что это то, чему нужно обязательно уделять внимание. Буду пользоваться!
Ответить
А на Вашем хосте разве нет банальной двухфакторной аутентификации со всякими там смс-ками?
Ответить
Михаил, у меня вход по одноразовому паролю из смс осуществляется при доступе к личному кабинету регистратора домена и хостинг-провайдера. В данном случае речь идет про доступ в панель администрирования WordPress.
Ответить
Ну, да! …это я буксанул (своё в голове варилось) — осознал уже после отправки коммента!
Это я на Вашу эту статью зашел и зарапортовался. А узнать хотел вот о чём (немного не в тему статьи, но…) — у Вас используется синтаксис (для подсветки кода) не обращали внимания как он ведёт себя на Опере Мини? Строки кода кое-где размером увеличены…
Ответить
Михаил, не проверял в этом браузера, спасибо за сообщение, обязательно посмотрю что можно сделать. Насколько я помню, Опера Мини прогоняет весь трафик через свои сервера и сжимает данные, возможно в этот момент и происходит искажение…
Ответить
Заинтересовался, защиты много не бывает. Возник такой вопрос. Я же могу через ftp сам создать файл с логином и паролем и прикрутить эту настройку?
Ответить
Кирилл, можно и по FTP все сделать, нужен только доступ к файлам. Попробуйте, поделитесь своим опытом — получится или нет 😉
Ответить
Webliberty, я сделал все как надо. Правда после того, как я неправильно ввел пароль, он вообще перестал даже показывать мне форму, вместо нее сразу 500 ошибка. Буду разбираться дальше
Ответить
А что вы скажите по поводу плагина Login LockDown. Он вроде бы делает тоже самое, что описано в статье.
Ответить
Сергей, плагин выполняет иные более расширенные задачи — защита от перебора паролей путем блокирования подозрительных попыток входа с одного IP адреса.
Ответить