Разное

Http wp admin: Как войти в админку WordPress

19.06.2023

Как закрыть доступ к папке «wp-admin» в WordPress

Есть много советов как обезопасить WordPress. В числе прочих — изменить адрес формы логина и папку «wp-admin» админ панели. Но большинство предлагаемых решений мне не понравились. Я попробовал все что нашел и решил сделать все по-своему. Админ панель (wp-admin) обезопасил через редирект в .htaccess на протокол httpS (порт 443) недоступный снаружи без пароля. И форму логина тогда можно было уже не переименовывать.

Но есть в этом решении одна важная деталь. Адрес необходимый для работы Ajax содержит так же папку «wp-admin», и его надо оставить открытым, исключить из перенаправления. Для этого нужно в .htaccess добавить одно дополнительное правило.

При этом адрес формы ввода логина и пароля я все-же оставил измененным. Потому что не исключено что когда-нибудь в будущем ситуация может измениться и перенаправление для папки «wp-admin» админ панели может быть придется все-же убрать.

Изменения .

/wp-admin/…»), но у меня работает так (и только так) как указанно выше.

В той ситуации с которой я столкнулся доступ на сайт по http (80 порт) открыт, а по httpS (443 порт) — закрыт паролем.
Но даже если без этого — приведенный выше пример может пригодиться для других целей. Правила обязательного перенаправления на httpS только для одной папки сайта (здесь «wp-admin»), но исключая один адрес в ней (например для Ajax-запросов) может быть полезны просто в качестве примера.

Проверка

Нужно выйти из админки (разлогинится). После этого попытаться ввести адрес «http://_сайт_/wp-admin/». Если все сделано правильно, то редирект на httpS должен произойти до того как сработает стандартный редирект на форму логина. Если выбрасывает на «http://_сайт_/wp-login.php» (или свою форму логина), то редирект .htaccess не работает. Потому что он должен срабатывать раньше и сначала перебрасывать на «httpS://_сайт_/wp-admin/…»

КСТАТИ! Если страница админки не существует то редирект не сработает! Будет показана стандартная 404.

Форма логина — изменяем имя с wp-login.php на свое

Это здесь просто в качестве дополнения, поскольку уже не относится к основной теме. Адрес формы логина обычно меняют чтобы отсечь нагрузку на сервер от ботов. На самом деле это слишком просто, поэтому я и решил упомянуть здесь об этом тоже.

Итак.
Нужно переименовать файл «wp-login.php» на «_свое_имя_.php» и сделать замену в коде в двух местах:
1. В самом файле «_свое_имя_.php» — заменить везде где там встретится «wp-login.php» на новое имя.
2. Сделать такую-же замену в файле «…/wp-includes/general-template.php»

ВАЖНО! После обновления движка эту операцию придется повторить.

Файл admin-ajax.php и нагрузка на сервер

Нам в редакцию часто пишут с просьбой разобраться с нагрузкой на сайт WordPress, и во многих случаях это связано с файлом admin-ajax.php. В этой статье мы расскажем за что отвечает данный файл и как бороться с его нагрузкой на сервер.

AJAX запросы и admin-ajax.

php

AJAX — это асинхронные HTTP запросы выполняемые на странице с помощью языка JavaScript, позволяющие общаться с веб-сервером без полной перезагрузки страницы. Это позволяет делать интерфейсы более быстрыми, отзывчивыми и динамичными.

В WordPress такой подход используется во многих местах: работа с медиафайлами, автоматическое сохранение записей, управление ревизиями, работа с произвольными полями, работа с виджетами и многое другое. И чтобы каждый раз не изобретать велосипед, файл admin-ajax.php в WordPress предоставляет удобный API для работы с AJAX запросами.

В данной статье мы не будем рассматривать сам API, но стоит отметить, что несмотря на присутствие слова «admin» в названии файла, через него могут проходить запросы и с лицевой части сайта, включая анонимные запросы из тем и плагинов WordPress. К сожалению многие источники ошибочно советуют отключить этот файл, или заблокировать его паролем — этого делать не стоит.

Большое количество запросов на admin-ajax.

php

Как мы уже упомянули, файл admin-ajax.php вызывается при автоматическом сохранении записей, а также для обновления блокировок, чтобы два пользователя не могли редактировать одну и ту же запись одновременно. Это реализует API в WordPress под названием Heartbeat (сердцебиение), который построен на базе admin-ajax.php.

Запросы на admin-ajax.php

При редактировании записи Heartbeat отправляет запрос на admin-ajax.php каждые 15 секунд (или каждые 60 секунд, в случае если вкладка в браузере не является активной). Поэтому если вы видите в логах вашего веб-сервера большое количество запросов на admin-ajax.php стоит их проанализировать.

  • С каких IP адресов приходят эти запросы
  • С какой периодичностью они приходят
  • Сколько времени в среднем занимает один такой запрос
  • Каково содержание запроса

Итак, если эти запросы приходят с вашего IP адреса, или с IP адресов редакторов на вашем сайте, если их периодичность около 15-60 секунд, если каждый такой запрос занимает не более 0. 5 сек, и содержание запросов не содержит ничего необычного, то все в порядке — файл admin-ajax.php не является источником нагрузки на ваш сервер, независимо от «большого» количества запросов. А если ваш хостинг-провайдер уверяет вас в обратном, то советуем задуматься о его компетентности и о возможном переезде.

Когда admin-ajax.php действительно является проблемой

Рассмотрим несколько вариантов, когда admin-ajax.php действительно становится источником высокой нагрузки на ваш сервер, и как бороться с этой нагрузкой.

Запросы на admin-ajax.php занимают более 1 секунды

В среднем запросы на admin-ajax.php могут занимать около 300 мс. Если же на вашем сайте данные запросы выполняются более чем за одну секунду, то необходимо разобраться. Используйте средства профилирования, чтобы понять чем именно занят процесс все это время. Наверняка вы найдете медленную функцию в вашей теме или плагине, которая не имеет никакого отношения к AJAX запросам.

Если же вы не владеете средствами профилирования, или у вас нет времени разбираться в чужом коде, то попробуйте отключить все плагины и активировать стандартную тему WordPress. Затем активируйте плагины по порядку, чтобы понять какой из них является причиной медленных запросов на admin-ajax.php.

Бывает и такое, что запросы на admin-ajax.php становятся медленными не из-за конкретных плагинов или тем, а из-за неоптимальной конфигурации сервера MySQL. Такое бывает достаточно редко, и в этом случае следует заняться оптимизацией сервера базы данных.

Подозрительное содержание запроса

Файл admin-ajax.php (и admin-post.php) часто выбирается злоумышленниками для того, чтобы использовать известную уязвимость в каком-нибудь плагине. В качестве примера можно привести недавний инцидент с популярным плагином FancyBox, где именно admin-ajax.php (или admin-post.php) послужил точкой входа.

Эти файлы выбираются не спроста, ведь каждый из них исполняет событие admin_init даже для анонимных HTTP запросов. Многие разработчики плагинов и тем, ошибочно считают, что раз выполняется событие admin_init, значит пользователь выполнил вход и имеет права администратора.

Это не так. Повторяем — событие admin_init выполняется даже для анонимных HTTP запросов.

Итак, в случае с уязвимостью плагина FancyBox for WordPress, вот примерно то, как выглядит «подозрительное содержание запроса»:

46.4.76.174 – – [04/Feb/2015:00:25:09 -0500] "POST /wp-admin/admin-ajax.php?page=fancybox-for-wordpress HTTP/1.1" 403 4207 INPUTBODY:action=update&mfbfw%5Bext...

Если вы обнаружили подобный запрос, необходимо понять на какой конкретно плагин или тему он нацелен, что именно он пытается сделать, удалось ли ему это. В подобных случаях мы рекомендуем обратиться к экспертам по безопасности WordPress.

Неузнаваемые IP адреса

Этот пункт тесно связан с предыдущим. Если вы увидели запросы на admin-ajax.php с неузнаваемых IP адресов, то необходимо проанализировать эти запросы, и понять чего именно пытается сделать злоумышленник. IP адреса можно заблокировать, например по шаблону с помощью fail2ban.

Слишком частая периодичность запросов

Как мы уже упомянули, на активной вкладке при редактировании записи, WordPress выполняет AJAX запрос каждые 15 секунд, т. е. для достижения 1 запроса в секунду на сервере, вам необходимо 15 редакторов с открытой вкладкой. Если вы являетесь единственным редакторов на вашем сайте, а запросов на admin-ajax.php с вашего IP адреса более 1 в секунду (мы встречали и 20/с), то стоит с этим разобраться.

Самой частой причиной подобного поведения является тема или плагин, поэтому следует их деактивировать и включать по порядку, чтобы найти источник. Здесь стоит также упомянуть плагин Heartbeat Control, который позволяет изменять стандартную конфигурацию Heartbeat в WordPress, но учтите, что отключив Heartbeat вы скорее временно скрываете проблему, а не устраняете ее.

Заключение

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

В случае с любой «лишней» нагрузкой на сервер, рекомендуем всегда проверять факты, средства профилирования — ваши лучшие друзья. Результаты порой бывают удивительными, когда например некоторые из очень популярных плагинов для WordPress оказываются самыми медленными.

Защита панели управления паролем от CPanel

Несмотря на то, что панель администратора WordPress или, как известно, каталог wp-admin WordPress защищены паролем с помощью имени пользователя и пароля WordPress, в идеале следует добавить дополнительный уровень безопасности, добавив дополнительный контроль аутентификации. веб-сервером. Поступая таким образом, вы также защищаете свою установку WordPress от недавно обнаруженных уязвимостей нулевого дня.

Если вы размещаете WordPress на собственном сервере, вы можете вручную добавить дополнительный уровень безопасности в каталог WordPress wp-admin, добавив дополнительную HTTP-аутентификацию с помощью файла htaccess. В качестве альтернативы, если вы используете решение для веб-хостинга, вы также можете добавить этот дополнительный уровень безопасности от CPanel хостинг-провайдера. В этой статье мы шаг за шагом объясним, как добавить дополнительную аутентификацию с помощью CPanel.

Добавьте дополнительную безопасность в WordPress wp-admin из CPanel

  1. Войдите в CPanel своего хостинг-провайдера и прокрутите вниз до раздела «Безопасность», показанного на снимке экрана ниже.

  1. Нажмите на Защитить паролем каталоги , который выделен на скриншоте выше.
  2. После того, как вы нажмете на нее, появится всплывающее окно с просьбой указать местоположение каталога. Вы можете указать корневой веб-каталог.
  3. Когда вы находитесь в окне проводника каталогов, перейдите в каталог, в котором размещен ваш WordPress, и щелкните каталог /wp-admin/.

WP White Security CPanel Совет:

В проводнике каталогов CPanel вам нужно щелкнуть значок каталога, чтобы просмотреть его содержимое. Если вы нажмете на имя каталога, этот каталог будет защищен паролем.

  1. После того, как вы выберете каталог WorPress wp-admin, вы увидите страницу, показанную на снимке экрана ниже. Подтвердите правильный путь к каталогу (выделено цифрой 1) и отметьте опцию 9.0016 Защитите этот каталог паролем и укажите понятное имя в поле Имя защищенного каталога, как показано на снимке экрана ниже.

  1. Нажмите кнопку
    Сохранить
    , чтобы сохранить изменения.
  2. Следующим шагом является создание имени пользователя и пароля HTTP для доступа к этому каталогу. Нажмите кнопку «Назад» и прокрутите вниз до раздела «Создать пользователя », который выделен на снимке экрана выше цифрой 2.
  3. Укажите имя пользователя и надежный пароль, после чего нажмите Добавить/изменить авторизованного пользователя . Если у вас уже есть существующий пользователь, вы можете изменить его, выделив его в списке.

WP White Security Совет по безопасности: Надежный пароль должен содержать не менее 8 символов и не должен быть предсказуемым словарным словом. Используйте прописные и строчные буквы, цифры и специальные символы, такие как !? и т. д.

Готово. Вы можете проверить, работает ли это, попытавшись получить доступ к панели управления WordPress (раздел /wp-admin/). При доступе к панели администратора WordPress должно появиться окно HTTP-аутентификации, как показано ниже.

Разрешение функций Ajax внешнего интерфейса

Некоторые плагины WordPress используют функции Ajax в WordPress. Это означает, что таким плагинам может потребоваться доступ к файлу admin-ajax.php, который находится в каталоге wp-admin. Чтобы разрешить анонимный доступ к такому файлу для работы плагинов WordPress, вы должны разрешить функциональность внешнего интерфейса Ajax.

Не удается получить доступ к панели управления wp-admin — bud

honsey 1

Я настроил среду разработки WordPress с решеткой . Теперь нужно разработать тему с sage . Вроде все работает нормально, но при попытке использовать bud я не могу войти в панель управления.

Я попытался получить немного больше информации о том, что происходит: yarn dev --log --verbose --no-cache

При доступе к http://0.0.0.0:3000 это вывод:

 [99%] [кэш] начать бездействие
❯ запуск действия event.compiler.done 1/2
❯ запуск действия event.compiler.done 2/2
[http] › ❯ [200] /wp-admin
Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту
Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту
ℹ /wp-admin null text/html; кодировка = UTF-8
❯ запуск действия event.proxy.interceptor 1/2
❯ запуск действия event.proxy.interceptor 2/2
[http] › ❯ [200] /wp/wp-includes/css/dashicons.css?ver=5.9.2
[http] › ❯ [200] /wp/wp-includes/css/buttons.css?ver=5.9.2
[http] › ❯ [200] /wp/wp-admin/css/l10n.css?ver=5.9.2
[http] › ❯ [200] /wp/wp-admin/css/login.css?ver=5.9.2
[http] › ❯ [200] /wp/wp-admin/css/forms.css?ver=5.9.2
[http] › ❯ [200] /wp/wp-includes/js/jquery/jquery.js?ver=3.6.0
ℹ /wp/wp-includes/css/buttons.
css?ver=5.9.2 null text/css; кодировка = utf-8 ❯ запуск действия event.proxy.interceptor 1/2 ❯ запуск действия event.proxy.interceptor 2/2 [http] › ❯ [200] /wp/wp-includes/js/jquery/jquery-migrate.js?ver=3.3.2 ℹ /wp/wp-includes/css/dashicons.css?ver=5.9.2 нулевой текст/CSS; кодировка = utf-8 ❯ запуск действия event.proxy.interceptor 1/2 ❯ запуск действия event.proxy.interceptor 2/2 [http] › ❯ [200] /wp/wp-includes/js/zxcvbn-async.js?ver=1.0 ℹ /wp/wp-admin/css/l10n.css?ver=5.9.2 null text/css; кодировка = utf-8 ❯ запуск действия event.proxy.interceptor 1/2 ❯ запуск действия event.proxy.interceptor 2/2 ℹ /wp/wp-admin/css/login.css?ver=5.9.2 null text/css; кодировка = utf-8 ❯ запуск действия event.proxy.interceptor 1/2 ❯ запуск действия event.proxy.interceptor 2/2 [http] › ❯ [200] /wp/wp-includes/js/dist/vendor/regenerator-runtime.js?ver=0.13.9[http] › ❯ [200] /wp/wp-includes/js/dist/vendor/wp-polyfill.js?ver=3.15.0 ℹ /wp/wp-admin/css/forms.css?ver=5.9.2 null text/css; кодировка = utf-8 ❯ запуск действия event.
proxy.interceptor 1/2 ❯ запуск действия event.proxy.interceptor 2/2 [http] › ❯ [200] /wp/wp-includes/js/dist/hooks.js?ver=1e58c8c5a32b2e97491080c5b10dc71c ℹ /wp/wp-includes/js/zxcvbn-async.js?ver=1.0 нулевое приложение/javascript; кодировка = utf-8 ℹ /wp/wp-includes/js/jquery/jquery.js?ver=3.6.0 нулевое приложение/javascript; кодировка = utf-8 [http] › ❯ [200] /wp/wp-includes/js/dist/i18n.js?ver=30fcecb428a0e8383d3776bcdd3a7834 ℹ /wp/wp-includes/js/jquery/jquery-migrate.js?ver=3.3.2 нулевое приложение/javascript; кодировка = utf-8 [http] › ❯ [200] /wp/wp-admin/js/password-strength-meter.js?ver=5.9.2 [http] › ❯ [200] /wp/wp-includes/js/underscore.min.js?ver=1.13.1 ℹ /wp/wp-includes/js/dist/vendor/regenerator-runtime.js?ver=0.13.9 нулевое приложение/javascript; кодировка = utf-8 [http] › ❯ [200] /wp/wp-admin/js/user-profile.js?ver=5.9.2 ℹ /wp/wp-includes/js/dist/vendor/wp-polyfill.js?ver=3.15.0 нулевое приложение/javascript; кодировка = utf-8 [http] › ❯ [200] /wp/wp-includes/js/wp-util.js?ver=5.
9.2 ℹ /wp/wp-includes/js/dist/hooks.js?ver=1e58c8c5a32b2e97491080c5b10dc71c null application/javascript; кодировка = utf-8 [http] › ❯ [200] /wp/wp-admin/images/wordpress-logo.svg?ver=20131107 ℹ /wp/wp-includes/js/dist/i18n.js?ver=30fcecb428a0e8383d3776bcdd3a7834 null application/javascript; кодировка = utf-8 ℹ /wp/wp-includes/js/underscore.min.js?ver=1.13.1 нулевое приложение/javascript; кодировка = utf-8 ℹ /wp/wp-admin/js/пароль-сила-метр.js?ver=5.9.2 нулевое приложение/javascript; кодировка = utf-8 ℹ /wp/wp-admin/js/user-profile.js?ver=5.9.2 нулевое приложение/javascript; кодировка = utf-8 ℹ /wp/wp-includes/js/wp-util.js?ver=5.9.2 нулевое приложение/javascript; кодировка = utf-8 ℹ /wp/wp-admin/images/wordpress-logo.svg?ver=20131107 нулевое изображение/svg+xml [http] › ❯ [200] /favicon.ico Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту ℹ /favicon.ico нулевое изображение/png

Ввод моих учетных данных, попытка входа…

 [http] › ❯ [200] /wp/wp-login. php
Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту
Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту
ℹ /wp/wp-login.php null text/html; кодировка = UTF-8
❯ запуск действия event.proxy.interceptor 1/2
❯ запуск действия event.proxy.interceptor 2/2
[http] › ❯ [200] /wp/wp-includes/css/dashicons.css?ver=5.9.2
[http] › ❯ [200] /wp/wp-includes/css/buttons.css?ver=5.9.2
[http] › ❯ [200] /wp/wp-admin/css/forms.css?ver=5.9.2
[http] › ❯ [200] /wp/wp-admin/css/l10n.css?ver=5.9.2
[http] › ❯ [200] /wp/wp-admin/css/login.css?ver=5.9.2
[http] › ❯ [200] /wp/wp-includes/js/jquery/jquery.js?ver=3.6.0
ℹ /wp/wp-includes/css/dashicons.css?ver=5.9.2 null text/css; кодировка = utf-8
❯ запуск действия event.proxy.interceptor 1/2
❯ запуск действия event.proxy.interceptor 2/2
ℹ /wp/wp-admin/css/forms.css?ver=5.9.2 null text/css; кодировка = utf-8
❯ запуск действия event.proxy.interceptor 1/2
❯ запуск действия event.proxy.interceptor 2/2
[http] › ❯ [200] /wp/wp-includes/js/jquery/jquery-migrate. js?ver=3.3.2
[http] › ❯ [200] /wp/wp-includes/js/zxcvbn-async.js?ver=1.0
ℹ /wp/wp-includes/css/buttons.css?ver=5.9.2 нулевой текст/CSS; кодировка = utf-8
❯ запуск действия event.proxy.interceptor 1/2
❯ запуск действия event.proxy.interceptor 2/2
[http] › ❯ [200] /wp/wp-includes/js/dist/vendor/regenerator-runtime.js?ver=0.13.9
ℹ /wp/wp-admin/css/l10n.css?ver=5.9.2 null text/css; кодировка = utf-8
❯ запуск действия event.proxy.interceptor 1/2
❯ запуск действия event.proxy.interceptor 2/2
[http] › ❯ [200] /wp/wp-includes/js/dist/vendor/wp-polyfill.js?ver=3.15.0
ℹ /wp/wp-admin/css/login.css?ver=5.9.2 null text/css; кодировка = utf-8
❯ запуск действия event.proxy.interceptor 1/2
❯ запуск действия event.proxy.interceptor 2/2
[http] › ❯ [200] /wp/wp-includes/js/dist/hooks.js?ver=1e58c8c5a32b2e97491080c5b10dc71c
ℹ /wp/wp-includes/js/zxcvbn-async.js?ver=1.0 нулевое приложение/javascript; кодировка = utf-8
ℹ /wp/wp-includes/js/jquery/jquery.js?ver=3.6.0 нулевое приложение/javascript; кодировка = utf-8
[http] › ❯ [200] /wp/wp-includes/js/dist/i18n. js?ver=30fcecb428a0e8383d3776bcdd3a7834
ℹ /wp/wp-includes/js/jquery/jquery-migrate.js?ver=3.3.2 нулевое приложение/javascript; кодировка = utf-8
ℹ /wp/wp-includes/js/dist/vendor/regenerator-runtime.js?ver=0.13.9 нулевое приложение/javascript; кодировка = utf-8
[http] › ❯ [200] /wp/wp-admin/js/password-strength-meter.js?ver=5.9.2
[http] › ❯ [200] /wp/wp-includes/js/underscore.min.js?ver=1.13.1
[http] › ❯ [200] /wp/wp-includes/js/wp-util.js?ver=5.9.2
ℹ /wp/wp-includes/js/dist/vendor/wp-polyfill.js?ver=3.15.0 нулевое приложение/javascript; кодировка = utf-8
[http] › ❯ [200] /wp/wp-admin/js/user-profile.js?ver=5.9.2
ℹ /wp/wp-includes/js/dist/hooks.js?ver=1e58c8c5a32b2e97491080c5b10dc71c null application/javascript; кодировка = utf-8
[http] › ❯ [200] /wp/wp-admin/images/wordpress-logo.svg?ver=20131107
ℹ /wp/wp-includes/js/dist/i18n.js?ver=30fcecb428a0e8383d3776bcdd3a7834 null application/javascript; кодировка = utf-8
ℹ /wp/wp-admin/js/пароль-сила-метр.js?ver=5.9.2 нулевое приложение/javascript; кодировка = utf-8
ℹ /wp/wp-includes/js/wp-util. js?ver=5.9.2 нулевое приложение/javascript; кодировка = utf-8
ℹ /wp/wp-includes/js/underscore.min.js?ver=1.13.1 нулевое приложение/javascript; кодировка = utf-8
ℹ /wp/wp-admin/js/user-profile.js?ver=5.9.2 нулевое приложение/javascript; кодировка = utf-8
ℹ /wp/wp-admin/images/wordpress-logo.svg?ver=20131107 нулевое изображение/svg+xml
[http] › ❯ [200] /favicon.ico
Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту
ℹ /favicon.ico нулевое изображение/png
 

Не в панели управления, а на http://0.0.0.0:3000/wp/wp-login.php. Если я попытаюсь снова отсюда, то же самое…

Панель инструментов работает нормально при использовании URL-адреса прокси: http://wesf.test/wp-admin/

Кто-нибудь еще сталкивался с подобной проблемой?

Спасибо и хорошего дня,
Ханс

Келлимерс 2

Как только вы приземлились на http://0.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *