wpedu.ru wordpress WP Education

Как отключить XML-RPC в WordPress без поломки REST API

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

Ниже — рабочий сценарий: как понять, нужен ли XML-RPC именно вам, как отключить его безопасно и как проверить, что REST API и админка продолжают работать как раньше.

Когда XML-RPC действительно можно отключать

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

Диагностика проблемы

Признаки, что XML-RPC можно отключать:

  • в логах сервера много запросов к xmlrpc.php с ошибками авторизации;
  • сайт не использует старые приложения для публикации;
  • REST API уже используется для интеграций и работает стабильно;
  • в панели безопасности или WAF XML-RPC постоянно фигурирует как источник подозрительной активности.

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

Как отключить XML-RPC: сравнение подходов

Есть три практических варианта: через плагин, через код и через веб-сервер. Для большинства проектов лучше начинать с кода или плагина, потому что это проще откатить и легче контролировать.

СпособПлюсыМинусыКогда использовать
Плагин безопасностиБыстро, без правки темыДополнительная зависимостьЕсли нужен понятный интерфейс и есть уже установленный security-плагин
PHP-кодТочный контроль, легко убратьНужно понимать, куда вставлять кодЕсли вы ведёте сайт как разработчик и хотите минимальные изменения
.htaccess / nginxБлокирует запросы раньше WordPressМожно задеть другие правила, сложнее отлаживатьЕсли нужен жёсткий запрет на уровне сервера

Пошаговое решение через код

Самый аккуратный вариант — отключить только сам XML-RPC, не трогая REST API. Добавьте код в functions.php дочерней темы или в свой мини-плагин.

add_filter( 'xmlrpc_enabled', '__return_false' );

Этот фильтр отключает обработку XML-RPC на уровне WordPress. Для большинства сайтов этого достаточно: запросы к xmlrpc.php перестанут проходить как рабочие.

Если вы хотите не просто отключить функциональность, а ещё и явно отдать 403 на сам файл, можно добавить более жёсткую проверку:

add_action( 'init', function () {
    if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
        status_header( 403 );
        exit;
    }
} );

Этот вариант полезен, когда на сайте идут постоянные попытки обращения к XML-RPC и вы хотите сократить лишнюю нагрузку. Но если у вас есть сомнения по интеграциям, сначала используйте только фильтр xmlrpc_enabled.

Как отключить XML-RPC через сервер

Если сайт на Apache, можно закрыть доступ к файлу на уровне .htaccess. Это не заменяет проверку кода, но помогает отсечь лишние запросы ещё до загрузки WordPress.

<Files xmlrpc.php>
    Require all denied
</Files>

Для nginx логика похожая, но правило пишется в конфигурации виртуального хоста:

location = /xmlrpc.php {
    deny all;
    access_log off;
    log_not_found off;
}

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

Что проверить после отключения

После внедрения важно не ограничиться фактом, что файл перестал открываться в браузере. Проверьте именно те сценарии, которые могут пострадать.

  • Откройте /xmlrpc.php — должен быть отказ в доступе или пустой ответ без успешной обработки.
  • Проверьте REST API: /wp-json/ должен открываться как раньше.
  • Убедитесь, что вход в админку работает.
  • Если используется мобильное приложение WordPress или внешняя публикация, протестируйте их отдельно.
  • Посмотрите логи сервера: количество обращений к xmlrpc.php должно снизиться или запросы должны получать отказ без ошибок PHP.

Для быстрой проверки REST API можно открыть в браузере /wp-json/wp/v2/posts или выполнить запрос через curl:

curl -I https://example.com/wp-json/

Если ответ приходит нормально, а xmlrpc.php закрыт, значит вы отключили только ненужный механизм и не задели API.

Частые ошибки и как их исправить

Отключили XML-RPC, а перестала работать публикация из внешнего сервиса

Значит, сервис всё ещё использовал XML-RPC, а не REST API. Решение простое: либо вернуть доступ, либо перевести интеграцию на REST API, если сервис это поддерживает.

Закрыли xmlrpc.php, но в логах всё равно идут запросы

Это нормально: сканеры и боты продолжают стучаться, но теперь они должны получать отказ. Если запросы доходят до PHP, лучше добавить блокировку на уровне nginx или Apache, чтобы не тратить ресурсы.

Сломали REST API вместе с XML-RPC

Обычно это происходит, когда отключают не только XML-RPC, а ещё и связанные маршруты через слишком агрессивный security-плагин или правило в WAF. Проверьте, не блокируется ли /wp-json/, и временно отключите лишние правила защиты.

Вставили код в родительскую тему

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

Безопасность и производительность: что имеет смысл сделать вместе с отключением

Если XML-RPC был источником брутфорса, одного отключения иногда недостаточно. Полезно дополнительно ограничить попытки входа, проверить актуальность паролей администраторов и убедиться, что на сайте включена нормальная защита от перебора логина.

С точки зрения производительности отключение XML-RPC обычно не даёт заметного ускорения само по себе, но уменьшает лишние обращения к PHP и шум в логах. На нагруженных сайтах это уже практическая польза, особенно если боты регулярно долбят xmlrpc.php.

Короткий чек-лист перед выкладкой на прод

  • Проверен список интеграций, которые могли использовать XML-RPC.
  • Выбран способ отключения: код, сервер или плагин.
  • Сделан бэкап или хотя бы есть быстрый план отката.
  • REST API протестирован отдельно.
  • Проверены логи после изменения.

Если нужен более широкий аудит дублей, индексации и технической чистки сайта, в экосистеме WPShop есть Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpedu.ru&utm_medium=article&utm_campaign=kak-otklyuchit-xmlrpc-v-wordpress-bez-lomki-rest-api. Но для задачи отключения XML-RPC чаще всего достаточно точечной правки кода и проверки интеграций.

×

Увеличьте продажи!

Скидка на
My Popup!

-15%
плагин для WordPress

Успей купить ⋙