XML-RPC в WordPress часто отключают «на всякий случай», а потом ловят неочевидные поломки: перестают работать мобильные клиенты, внешние сервисы публикации, интеграции с Jetpack или старые скрипты автопостинга. Проблема не в самом отключении, а в том, что его делают без проверки зависимостей.
Ниже — рабочая схема: как понять, нужен ли XML-RPC именно вашему сайту, как отключить его без лишнего риска и как быстро проверить, что ничего не сломалось.
Когда XML-RPC реально можно отключать
XML-RPC нужен не всем. На большинстве сайтов он давно не используется, потому что задачи публикации и управления контентом решаются через админку WordPress, REST API или конкретные плагины. Но есть сценарии, где он всё ещё может быть задействован:
- подключение Jetpack на старых установках;
- мобильные приложения WordPress, если сайт и приложение настроены на XML-RPC;
- внешние сервисы публикации и синхронизации;
- старые интеграции, которые не переведены на REST API.
Если у вас обычный сайт-визитка, блог или корпоративный сайт без внешних публикаций, XML-RPC чаще всего не нужен. Но проверка всё равно обязательна: отключение «вслепую» — типичная причина обращений в поддержку.
Диагностика: как понять, используется ли XML-RPC
Начните с простого аудита. Не нужно сразу править .htaccess или ставить тяжёлые плагины безопасности.
Проверьте активные плагины и интеграции
Посмотрите, есть ли на сайте Jetpack, мобильные клиенты, сервисы автопостинга, интеграции с внешними CRM или редакторами. Если в документации плагина прямо указано использование XML-RPC, отключать его без замены нельзя.
Проверьте доступность endpoint
Откройте в браузере или через curl адрес /xmlrpc.php. Сам по себе ответ сервера ещё не доказывает, что endpoint нужен, но помогает понять, как он сейчас ведёт себя.
curl -I https://example.com/xmlrpc.phpЕсли сервер отдаёт 200 или 405, это нормально для проверки. Важно не это, а наличие зависимостей на стороне сайта.
Проверьте логи и события входа
Если у вас включено логирование на уровне сервера или безопасности, посмотрите, есть ли обращения к xmlrpc.php. Частые запросы к этому файлу без понятного источника — повод отключать его в первую очередь.
Что лучше: плагин, код или блокировка на сервере
Способ зависит от того, насколько аккуратно вы хотите управлять исключениями. Для большинства сайтов достаточно кода в functions.php или в небольшом must-use плагине. Если нужен более жёсткий контроль на уровне сервера, можно блокировать запросы в веб-сервере, но это уже менее гибко.
| Подход | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Код в WordPress | Просто откатить, легко сопровождать | Не блокирует запрос до загрузки WordPress | Обычные сайты, где важна управляемость |
| Плагин безопасности | Удобно для админов без кода | Лишняя зависимость, иногда перегруз настроек | Если уже используете security-плагин |
| Блокировка на сервере | Ранний отказ, меньше нагрузки | Сложнее поддерживать, можно задеть легитимные сценарии | Когда XML-RPC точно не нужен и нужен жёсткий запрет |
Пошаговое решение: отключаем XML-RPC без лишнего риска
Вариант 1. Отключение через код
Самый прозрачный способ — отключить XML-RPC через фильтр WordPress. Добавьте код в functions.php дочерней темы или в отдельный мини-плагин.
<?php
add_filter( 'xmlrpc_enabled', '__return_false' );Это отключит сам механизм XML-RPC на уровне WordPress. Если позже выяснится, что какой-то сервис всё же нужен, код можно быстро убрать.
Вариант 2. Блокировка доступа к xmlrpc.php на уровне сервера
Если вы уверены, что endpoint не нужен вообще, можно закрыть прямой доступ. Для Apache это обычно делают через .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>Для Nginx логика будет другой, и правило лучше добавлять в конфигурацию виртуального хоста. Если вы не уверены в синтаксисе, не вносите правки на боевом сервере без теста на staging.
Вариант 3. Использовать плагин безопасности
Если у вас уже стоит плагин безопасности, проверьте, есть ли в нём отдельная опция для XML-RPC. Это удобно, когда сайт поддерживает не один админ и нужно отключать функцию без правки файлов. Но не ставьте плагин только ради одной галочки: лишний плагин — это ещё одна точка отказа и ещё один слой обновлений.
Как проверить, что отключение сработало
После внедрения проверьте не только сам endpoint, но и реальные сценарии, которые могли зависеть от XML-RPC.
- Откройте
/xmlrpc.phpв браузере — доступ должен быть закрыт или не давать полезного ответа для внешнего вызова. - Проверьте вход в админку и публикацию записей вручную.
- Если используете Jetpack, убедитесь, что его функции не сломались.
- Если есть мобильное приложение WordPress, попробуйте авторизацию и черновик.
- Посмотрите логи ошибок и access-логи на предмет новых 403/500 после изменения.
Для быстрой проверки через curl можно отправить тестовый XML-RPC-запрос. Если endpoint отключён, вы должны получить отказ в доступе или неуспешный ответ.
curl -i -X POST https://example.com/xmlrpc.php \
-H 'Content-Type: text/xml' \
--data '<?xml version="1.0"?><methodCall><methodName>system.listMethods</methodName></methodCall>'Если вместо отказа вы видите нормальный ответ со списком методов, отключение не сработало или его переопределяет серверная конфигурация.
Частые ошибки и как их исправить
Отключили XML-RPC, а перестал работать Jetpack
Значит, зависимость была, но её не проверили. Верните доступ, затем либо оставьте XML-RPC включённым, либо перенесите нужную функцию на другой механизм. Не пытайтесь «починить» это жёсткой блокировкой без понимания, какой именно модуль использует endpoint.
Добавили правило в .htaccess, но файл всё равно доступен
Часто причина в том, что сайт работает не на Apache, а на Nginx, либо правило перекрывается другой конфигурацией. Проверьте стек сервера и место, где реально обрабатываются правила доступа.
Поставили security-плагин, но он конфликтует с кэшем или авторизацией
Такое бывает, если плагин одновременно меняет несколько механизмов защиты. Если задача только в XML-RPC, лучше использовать точечное решение, а не тяжёлый набор функций, который затрагивает логин, REST API и заголовки безопасности.
Отключили XML-RPC на проде без теста
Это самая дорогая ошибка. Сначала проверьте staging-копию или хотя бы список активных интеграций. Если у сайта есть внешние публикации, отключение без теста почти гарантированно создаст инцидент.
Практические советы по безопасности и производительности
Если XML-RPC не нужен, его отключение полезно не только с точки зрения безопасности. Вы убираете лишнюю точку входа, которую часто сканируют боты. Но не стоит ожидать чудес по скорости: это не ускоритель сайта, а скорее сокращение поверхности атаки.
- не смешивайте отключение XML-RPC с другими изменениями безопасности в один коммит;
- сначала проверьте зависимости, потом закрывайте endpoint;
- если нужен только один внешний сервис, ищите у него поддержку REST API;
- после изменений проверьте логи хотя бы в течение нескольких дней;
- не ставьте несколько плагинов, которые одновременно управляют XML-RPC и REST API.
Если вы ведёте несколько сайтов, удобно зафиксировать это решение в чек-листе поддержки: где XML-RPC отключён, где оставлен и почему. Это экономит время при аудите и обновлениях.
Короткий чек-лист перед отключением
- Проверить, используется ли Jetpack или мобильное приложение.
- Посмотреть, есть ли внешние сервисы публикации.
- Проверить access-логи на обращения к
xmlrpc.php. - Выбрать способ отключения: код, плагин или сервер.
- После изменений протестировать вход, публикацию и интеграции.
- Проверить логи ошибок и ответы
/xmlrpc.php.
Если вам нужен более широкий аудит технических дублей, индексации и лишних элементов в WordPress, похожие задачи удобно закрывать точечными инструментами вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wporg.ru&utm_medium=article&utm_campaign=otklyuchit-xmlrpc-v-wordpress-bez-polomki-sayta. Но для самого XML-RPC чаще достаточно аккуратного кода и проверки зависимостей.