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

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

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

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

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

  • в логах много запросов к /xmlrpc.php;
  • идут переборы логинов через метод system.multicall;
  • сайт не использует удалённую публикацию;
  • нужно сократить поверхность атаки без установки лишнего плагина.

Если же у вас подключён сервис, который публикует записи по XML-RPC, сначала перенастройте интеграцию. Иначе вы получите не «усиление безопасности», а просто сломанную автоматизацию.

Диагностика: используется ли XML-RPC сейчас

Перед отключением проверьте, есть ли реальные обращения. Самый простой способ — посмотреть access-логи веб-сервера и найти запросы к xmlrpc.php. Если доступа к логам нет, можно временно добавить логирование на уровне WordPress и отследить обращения через серверный лог или WAF.

Что искать в логах

Обратите внимание на частые POST-запросы к /xmlrpc.php, особенно с одинаковых IP и с повторяющимися попытками авторизации. Это типичный признак автоматизированных атак. Если видите обращения от известных сервисов или приложений, сначала проверьте, можно ли перевести их на REST API или другой способ интеграции.

Полезно также проверить, не завязан ли на XML-RPC плагин Jetpack или сторонний клиент публикации. Если сомневаетесь, отключайте не сразу на боевом сайте, а сначала на staging-копии.

Способы отключения XML-RPC

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

СпособКогда подходитКомпромисс
Код в теме или mu-pluginНужно быстро и прозрачно отключить XML-RPC в WordPressЕсли тема сменится, правило можно потерять
Правило на сервереНужен жёсткий запрет до загрузки WordPressНужно иметь доступ к конфигу Nginx/Apache
Плагин безопасностиУдобнее управлять настройками без правки кодаДобавляется ещё один слой логики и зависимость от плагина

Вариант 1: отключить XML-RPC через код

Если нужен именно WordPress-уровень, используйте фильтр xmlrpc_enabled. Это самый понятный вариант для сайта, где вы контролируете код.

<?php
add_filter( 'xmlrpc_enabled', '__return_false' );

Лучше размещать это не в functions.php активной темы, а в небольшом mu-plugin, чтобы правило не исчезло после смены темы. Файл можно положить в wp-content/mu-plugins/disable-xmlrpc.php.

<?php
/**
 * Plugin Name: Disable XML-RPC
 */
add_filter( 'xmlrpc_enabled', '__return_false' );

Вариант 2: заблокировать xmlrpc.php на сервере

Если нужен жёсткий запрет, блокируйте сам файл на уровне веб-сервера. Тогда запросы не дойдут до WordPress вообще.

Для Nginx это обычно выглядит так:

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

Для Apache можно использовать правило в .htaccess:

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

Этот вариант хорош, если у вас уже есть практика управления серверными правилами. Но если сайт работает в окружении, где .htaccess не применяется, такой способ не сработает.

Вариант 3: ограничить доступ, а не отключать полностью

Иногда XML-RPC нужен только одному сервису. Тогда вместо полного запрета можно ограничить доступ по IP на уровне сервера или WAF. Это менее универсально, зато не ломает интеграцию.

Минус очевиден: если сервис меняет IP-адреса, правило придётся обновлять. Поэтому такой подход имеет смысл только там, где список адресов стабилен.

Пошаговое решение для боевого сайта

  1. Проверьте логи и убедитесь, что XML-RPC не нужен текущим интеграциям.
  2. Сделайте резервную копию конфигурации и файлов.
  3. Выберите способ блокировки: код, сервер или плагин безопасности.
  4. Внесите изменение сначала на staging-копии.
  5. Проверьте, что /xmlrpc.php больше не отвечает успешно.
  6. После выката ещё раз посмотрите логи на предмет ошибок интеграций.

Если у вас уже установлен плагин безопасности, иногда проще включить блокировку там, чем добавлять отдельный код. Но если задача точечная и вы не хотите раздувать стек, mu-plugin обычно надёжнее.

Как проверить, что отключение сработало

Проверка должна быть не «страница открылась», а именно контроль ответа на /xmlrpc.php. Откройте адрес напрямую в браузере или выполните запрос через curl.

curl -I https://example.com/xmlrpc.php

Ожидаемый результат зависит от способа блокировки:

  • при отключении через WordPress часто будет ответ с ошибкой или пустой ответ без успешной обработки;
  • при серверной блокировке обычно возвращается 403 Forbidden или 404;
  • если доступ всё ещё открыт, нужно проверить, не перекрывает ли правило другой конфиг или кэширующий слой.

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

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

Отключили XML-RPC в теме, а потом сменили тему

Это типичная ошибка. Правило исчезает вместе с темой. Решение — вынести код в mu-plugin или в отдельный мини-плагин.

Заблокировали файл на сервере, но WordPress всё ещё отвечает

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

Сломали интеграцию Jetpack или внешний клиент

Значит, отключение было слишком грубым. Верните доступ и либо настройте исключение по IP, либо переведите интеграцию на другой способ связи, если он доступен.

Сделали ставку на плагин, но забыли обновлять его

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

Практические советы по безопасности и производительности

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

  • есть ли ограничение на число попыток входа;
  • включена ли двухфакторная аутентификация для админов;
  • не торчит ли wp-login.php без защиты;
  • не создаёт ли кэш лишнюю нагрузку на страницу входа;
  • не используются ли устаревшие плагины, которые тоже расширяют поверхность атаки.

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

Что делать, если XML-RPC всё-таки нужен

Тогда не отключайте его полностью. Лучше ограничьте доступ, проверьте авторизацию в интеграции и оставьте только те сценарии, которые реально используются. В некоторых случаях разумнее закрыть доступ по IP или через WAF, чем ломать рабочий канал обмена данными.

Главный принцип здесь простой: сначала выясняем, кто использует /xmlrpc.php, потом выбираем уровень блокировки. Тогда отключение будет не «на удачу», а как нормальное техническое изменение с понятным эффектом.

Как создать многоязычный сайт на WordPress без плагинов
30.09.2026
Как создать собственный шорткод в WordPress
30.09.2026
Выполнение PHP кода в WPRemark для автоматизации WordPress
07.09.2026
Как отключить автоматическое изменение размера изображений в WordPress
07.09.2026
Как отключить XML-RPC в WordPress для повышения безопасности
07.09.2026

Как работать с WordPress: основы работы с движком, обзор встроенных функций, советы по созданию и редактированию контента.