Admin ajax php грузит сервер

Admin ajax php грузит сервер

Подбор паролей «POST /wp-login.php»

Самые распространенная ddos атака на сайт – это подбор паролей. Для защиты ставьте специальные плагины, про которые я писала в статье «Wordpress админка — как защитить сайт от взлома и вирусов».

В логах вы увидите «POST /wp-login.php» для wordpress или для другого движка стандартный адрес входа.

Но этого мало. Плагины заблокируют при определенном количестве неудачных попыток. Но не уберегут от нагрузки на сервер. Поэтому поставьте еще и двойную аутентификацию – это эффективный способ. Как все настроить во всех подробностях я писала в статье «Как защитить сервер от нагрузки».

Найдите абзац «Защита от перебора паролей для любых сайтов при помощи HTTP-авторизации».

Запрос «POST /xmlrpc.php» — обращение к файлу удаленной публикации.

Во-первых, не включайте возможность удаленной публикации XML-RPC (Pingback), если она вам не нужна.

Но в логах сайта вы увидели обращения злоумышленников к этому файлу. Что делать?

Можно удалить файл xmlrpc.php. Но при следующем обновлении движка он заново появится.

Есть несколько решений:

1. Можно добавить в файл functions.php установленной темы следующий код (фильтр):

2. Установить плагин Disable XML-RPC для отключения XML-RPC. Скачать плагин https://wordpress.org/plugins/disable-xml-rpc/

3. Другой вариант кода, который вставляется в function.php:

Запрос «POST /wp-cron.php? …»

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

Как вариант, отключим выполнение регулярных процедур крона. Для этого добавим в конфигурационный файл WordPress wp-config.php следующую строчку:

Добавлять ее можно в начале, в конце или после строчки установки языка:

Примечание: код в файл нужно вставлять без скобок 3

Про WordPress на русском языке

Нам в редакцию часто пишут с просьбой разобраться с нагрузкой на сайт 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.

" data-medium-file="https://wpmag.ru/wp-content/uploads/sites/13/2015/02/heartbeat-admin-ajax-wp-300×69.png" data-large-file="https://wpmag.ru/wp-content/uploads/sites/13/2015/02/heartbeat-admin-ajax-wp-1024×236.png" src="https://wpmag-22.cdn.pjtsu.com/wp-content/uploads/sites/13/2015/02/heartbeat-admin-ajax-wp.png?w=780" alt="Запросы на admin-ajax.php" width="766" height="176" srcset="https://wpmag-22.cdn.pjtsu.com/wp-content/uploads/sites/13/2015/02/heartbeat-admin-ajax-wp.png?resize=1277×294 1277w, https://wpmag-22.cdn.pjtsu.com/wp-content/uploads/sites/13/2015/02/heartbeat-admin-ajax-wp.png?resize=640×147 640w, https://wpmag-22.cdn.pjtsu.com/wp-content/uploads/sites/13/2015/02/heartbeat-admin-ajax-wp.png?resize=430×98 430w, https://wpmag-22.cdn.pjtsu.com/wp-content/uploads/sites/13/2015/02/heartbeat-admin-ajax-wp.png?resize=320×73 320w, https://wpmag-22.cdn.pjtsu.com/wp-content/uploads/sites/13/2015/02/heartbeat-admin-ajax-wp.png?resize=260×59 260w" sizes="(max-width: 1277px) 100vw, 1277px" />

Запросы на 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 запросам.

Читайте также:  Что такое mvc php

Если же вы не владеете средствами профилирования, или у вас нет времени разбираться в чужом коде, то попробуйте отключить все плагины и активировать стандартную тему 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, вот примерно то, как выглядит «подозрительное содержание запроса»:

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

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

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

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

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

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

Читайте также:  Прошивка телефона через flashtool инструкция

Заключение

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

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

Столкнулся с проблемой, после редактирования поста, при переходе по ссылке "Все страницы", загрузка страницы продолжалась около 15 минут(!). И это при том, что в списке страниц, их меньше 10.

Я долго мучался с этой проблемой, но вот сегодня опять вернулся к этому "тормозящему" сайту и решил докопаться до истины..

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

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

Был лишь один совет: по очереди отключить установленные плагины и проверять, не исчезнет ли ошибка.

Я воспользовался этим советом, и увидел, что проблема появляется при включенном плагине WP-NotCaptcha. Вот так дела, раньше все было с этим плагином норм. Но я долго разбираться не стал, просто снес его, и работа пошла без тормозов и остановок.

Я не буду утверждать что проблема именно в самом плагине (например, на этом блоге он работает нормально), я даже не уверен, что я в нем ничего не менял. Но точно могу сказать, если отловите такую проблему, то:

  1. ищите где именно происходит тормоз
  2. отрубайте все плагины
  3. включая по одному, проверяйте не появился ли баг вновь
  4. это самый быстрый вариант

Помнится когда я столкнулся в первый раз с этой проблемой, я убил на неё часов 6 своей жизни. Думаю эта заметка сэкономит их вам и вы сможете потратить эти часы на что-то более полезное! Урааа. 🙂

Ссылка на основную публикацию
Adblock detector