Если сайт на WordPress начал получать лишние обращения к xmlrpc.php, чаще всего проблема не в самом XML-RPC как технологии, а в функции pingback. Именно она дает лишний шум в логах, может участвовать в DDoS-сканировании и иногда создает ненужную нагрузку на сервер. При этом полностью отключать XML-RPC не всегда удобно: у части сайтов через него до сих пор работают внешние сервисы, мобильные клиенты или старые интеграции.
Ниже — рабочий сценарий: сначала быстро понять, что именно происходит, затем отключить только pingback, проверить результат и не сломать остальное.
Когда проблема действительно в XML-RPC pingback
Симптомы обычно довольно узнаваемые. В access-логах много запросов к /xmlrpc.php, а в панели хостинга растет число POST-запросов без видимой причины. Иногда сайт не падает, но начинает заметно чаще упираться в лимиты CPU или I/O. Если включен модуль защиты на стороне сервера, можно увидеть блокировки по сигнатурам XML-RPC.
Важно не путать pingback с обычными запросами WordPress REST API. Это разные механизмы. Если у вас ломается мобильное приложение WordPress или внешний сервис публикации, отключение XML-RPC целиком может быть слишком грубым решением. В таком случае лучше убрать именно pingback и оставить остальное.
Что проверить до изменений
- Есть ли в логах регулярные обращения к
xmlrpc.php. - Используются ли внешние сервисы, которым нужен XML-RPC.
- Есть ли на сайте старые темы или плагины, которые завязаны на pingback.
- Не закрывает ли проблему уже серверный WAF или fail2ban.
Как отключить pingback без полного отключения XML-RPC
Самый безопасный вариант — убрать поддержку pingback через фильтр xmlrpc_methods. Тогда WordPress перестанет принимать pingback-запросы, но другие XML-RPC методы останутся доступны, если они нужны.
<?php
add_filter( 'xmlrpc_methods', function( $methods ) {
unset( $methods['pingback.ping'] );
unset( $methods['pingback.extensions.getPingbacks'] );
return $methods;
} );Код можно добавить в functions.php дочерней темы или в небольшой mu-plugin. Для production-сайта mu-plugin обычно надежнее: он не зависит от активной темы и не потеряется при обновлении.
Вариант через mu-plugin
Создайте файл wp-content/mu-plugins/disable-pingback.php. Если папки mu-plugins нет, ее нужно создать вручную.
<?php
/**
* Plugin Name: Disable XML-RPC Pingback
*/
add_filter( 'xmlrpc_methods', function( $methods ) {
unset( $methods['pingback.ping'] );
unset( $methods['pingback.extensions.getPingbacks'] );
return $methods;
} );Если нужно убрать только pingback, а XML-RPC оставить для других задач, этого достаточно. Если же внешние интеграции не используются вообще, можно пойти дальше и закрыть xmlrpc.php на уровне сервера или через WordPress-фильтр xmlrpc_enabled.
Когда лучше отключить XML-RPC полностью
Полное отключение оправдано, если вы точно не используете:
- мобильное приложение WordPress;
- старые внешние публикации через XML-RPC;
- интеграции, которые работают только через этот протокол;
- плагины, завязанные на XML-RPC-методы.
Для такого сценария подойдет фильтр xmlrpc_enabled:
<?php
add_filter( 'xmlrpc_enabled', '__return_false' );Это уже более жесткое решение. Оно проще в сопровождении, но требует проверки всех интеграций. Если есть сомнения, сначала отключайте только pingback.
Сравнение подходов
| Подход | Что делает | Риск | Когда выбирать |
|---|---|---|---|
Отключить pingback через xmlrpc_methods | Убирает только pingback-методы | Минимальный | Если нужны другие XML-RPC функции |
Отключить XML-RPC через xmlrpc_enabled | Выключает весь XML-RPC | Может сломать интеграции | Если XML-RPC нигде не используется |
Закрыть xmlrpc.php на сервере | Блокирует доступ до WordPress | Самый жесткий вариант | Если нужна защита на уровне веб-сервера |
Как проверить, что решение сработало
Проверка должна быть не на глаз, а по факту ответа сервера. Самый простой способ — отправить тестовый XML-RPC pingback-запрос и посмотреть, что он больше не проходит.
Можно использовать curl и проверить ответ xmlrpc.php:
curl -i https://example.com/xmlrpc.phpЕсли XML-RPC отключен полностью, ответ обычно будет нерабочим для метода. Если вы убрали только pingback, сам файл может отвечать, но pingback-метод уже не должен выполняться. Для более точной проверки удобнее смотреть логи сервера и отправить тестовый pingback из внешнего источника, который раньше создавал такие запросы.
Практический чек-лист после внедрения:
- в логах стало меньше обращений к
xmlrpc.php; - нет ошибок у мобильного приложения WordPress, если оно используется;
- внешние интеграции продолжают работать;
- защита хостинга перестала ловить массовые XML-RPC-запросы;
- страница сайта и админка открываются без новых ошибок.
Частые ошибки и как их исправить
Отключили XML-RPC целиком, а потом сломалась интеграция
Такое бывает, если сайт использовал старый сервис публикации или мобильный клиент. Решение простое: верните xmlrpc_enabled и отключите только pingback через xmlrpc_methods.
Добавили код в активную тему и потеряли его после обновления
Это типичная ошибка. Для постоянной защиты лучше использовать mu-plugin. Он не зависит от темы и не исчезает при обновлении шаблона.
Проверяли только браузером
Открыть /xmlrpc.php в браузере недостаточно. Браузерный GET-запрос не показывает, работает ли именно pingback-метод. Нужна проверка через лог, тестовый POST или внешний сервис.
Путают XML-RPC и REST API
Отключение XML-RPC не должно ломать REST API. Если после изменений перестали работать блоки редактора, мобильное приложение или интеграция с внешним сервисом, причина, скорее всего, в другом месте.
Что еще можно сделать для безопасности и производительности
Если на сайте много мусорных запросов, одного отключения pingback может быть мало. Тогда стоит посмотреть на серверную защиту: ограничение частоты запросов, правила в WAF, базовую фильтрацию на уровне Nginx или Apache. Но эти меры лучше внедрять после того, как вы убедились, что проблема действительно в XML-RPC, а не в общем всплеске ботов.
Для сайтов, где регулярно приходится чистить технический мусор и дубли, полезно держать под рукой инструменты, которые помогают с SEO и технической гигиеной. Например, в Clearfy Pro есть набор функций для отключения лишнего и чистки типовых дублей, но даже с плагином стоит понимать, что именно вы выключаете и зачем.
Если нужен минимальный и предсказуемый вариант, начните с отключения pingback. Это обычно дает нужный эффект без лишнего риска. Полное отключение XML-RPC оставляйте только для случаев, когда вы уверены, что протокол нигде не используется.