XML-RPC в WordPress часто отключают «на всякий случай», а потом внезапно перестают работать Jetpack, мобильное приложение, удалённая публикация или сторонние интеграции. Проблема в том, что это не просто устаревший интерфейс, а точка входа, которая может быть нужна конкретному сайту. Поэтому правильный подход — сначала понять, используется ли XML-RPC вообще, и только потом отключать его точечно.
Когда XML-RPC действительно стоит отключать
Если сайт публикуется только из админки, не использует мобильное приложение WordPress, не подключён к Jetpack и не принимает записи из внешних сервисов, XML-RPC обычно можно закрыть. На практике это снижает поверхность атаки и убирает лишний публичный endpoint, который часто сканируют боты.
Но если у вас есть хотя бы один из этих сценариев, отключение нужно делать аккуратно:
- Jetpack использует XML-RPC для части функций;
- мобильное приложение WordPress может потерять доступ к сайту;
- сторонние сервисы публикации и автопостинга могут перестать отправлять записи;
- старые интеграции с внешними CMS и десктоп-клиентами часто завязаны именно на XML-RPC.
Диагностика: используется ли XML-RPC сейчас
Самая частая ошибка — отключить endpoint без проверки зависимостей. Начните с простого теста. Если сайт отвечает на запрос к xmlrpc.php, это ещё не значит, что он нужен, но это уже повод проверить интеграции.
Быстрая проверка ответа сервера
curl -i https://example.com/xmlrpc.phpНормальный ответ сам по себе не проблема. Важно понять, есть ли реальные обращения к этому файлу в логах веб-сервера или в логах безопасности. Если у вас есть доступ к access.log, посмотрите частоту запросов к /xmlrpc.php. Если там только боты, а легитимных обращений нет, отключение обычно оправдано.
Проверка зависимостей внутри сайта
Проверьте, установлен ли Jetpack, используются ли мобильные клиенты, есть ли интеграции с внешними сервисами публикации. Если сайт обслуживает редакцию, отдельно уточните у контент-команды, не публикуют ли они материалы из сторонних приложений.
| Подход | Когда подходит | Минус |
|---|---|---|
| Отключить через код | Если XML-RPC не нужен вообще | Нужно следить за темой, mu-plugin и обновлениями |
| Ограничить на уровне сервера | Если нужен жёсткий контроль доступа | Требует доступа к конфигу nginx/apache |
| Оставить включённым | Если есть Jetpack или внешняя публикация | Поверхность атаки остаётся |
Как отключить XML-RPC в WordPress
Есть два рабочих варианта: через код и через веб-сервер. Если нужен быстрый и обратимый способ, удобнее начать с кода. Если вы администрируете сервер и хотите закрыть endpoint на уровне инфраструктуры, лучше сделать это там.
Вариант 1: отключение через код
Добавьте фильтр в functions.php дочерней темы или, лучше, в небольшой mu-plugin. Так решение не потеряется при смене темы.
<?php
add_filter( 'xmlrpc_enabled', '__return_false' );Это отключает XML-RPC на уровне WordPress. Если позже выяснится, что он нужен, строку можно убрать без правок базы или настроек сервера.
Вариант 2: блокировка на уровне nginx
Если сайт работает на nginx, можно закрыть доступ к файлу xmlrpc.php до передачи запроса в PHP. Это полезно, когда вы хотите уменьшить нагрузку от ботов ещё до запуска WordPress.
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}Для Apache логика похожая, но синтаксис будет другим. Если у вас нет уверенности в конфиге, не вносите изменения вслепую: ошибка в правилах может затронуть весь сайт.
Что делать, если XML-RPC нужен частично
Иногда отключать его полностью нельзя. Например, Jetpack нужен только для статистики или удалённого управления, а мобильное приложение — только редакторам. В таком случае лучше не ломать всё, а ограничить доступ по IP или вынести нужную интеграцию на отдельный канал, если это возможно.
Для сайтов с повышенными требованиями к безопасности обычно разумнее:
- оставить XML-RPC включённым только если это подтверждённая необходимость;
- ограничить доступ на уровне сервера или WAF;
- регулярно проверять логи на подозрительные обращения;
- не держать открытыми лишние внешние интеграции.
Проверка результата после внедрения
После отключения проверьте не только сам endpoint, но и реальные сценарии использования. Иначе можно получить «тихую» поломку, которую заметят только редакторы.
Что проверить вручную
- открывается ли
/xmlrpc.phpв браузере или черезcurl; - работает ли вход через мобильное приложение WordPress, если оно используется;
- не сломался ли Jetpack и связанные с ним функции;
- не перестали ли публиковаться записи из внешних сервисов;
- нет ли ошибок в логах PHP и веб-сервера после отключения.
Если вы отключали XML-RPC через код, полезно временно включить логирование ошибок на тестовом стенде и проверить, не обращается ли кто-то к этому интерфейсу в фоне.
Минимальный тест через curl
curl -i https://example.com/xmlrpc.phpЕсли блокировка настроена правильно, вы должны увидеть отказ в доступе на уровне сервера или отключение функции на уровне WordPress. Главное — не получить неожиданный 200 OK с рабочим XML-RPC, если вы рассчитывали его закрыть.
Частые ошибки и как их исправить
На практике проблемы повторяются почти всегда одни и те же.
- Отключили XML-RPC в теме. При смене темы защита исчезает. Решение: перенести код в mu-plugin или на уровень сервера.
- Не проверили Jetpack. После отключения пропадают функции, которые редакция считала «обычными». Решение: заранее сверить список подключённых сервисов.
- Закрыли endpoint, но оставили старые интеграции. Внешний сервис продолжает слать запросы и получает ошибки. Решение: сначала найти источник обращений в логах.
- Пытались лечить проблему только плагином безопасности. Это не всегда плохо, но плагин не заменяет проверку зависимостей. Решение: понимать, что именно блокируется и где.
Безопасность и производительность: что ещё имеет смысл сделать
Если вы уже чистите поверхность атаки, не ограничивайтесь только XML-RPC. Проверьте, не торчит ли у сайта лишняя техническая экспозиция: устаревшие плагины, неиспользуемые темы, открытые тестовые поддомены, публичные бэкапы. Для этого полезно пройтись по списку активных расширений и убрать всё, что не нужно в продакшене.
Если вам удобнее закрывать такие вещи централизованно, можно использовать инструменты для технической чистки и отключения лишних функций, например Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже в этом случае не стоит отключать XML-RPC без проверки интеграций — плагин не знает, как именно устроен ваш рабочий процесс.
Короткий чек-лист перед отключением
- Проверить, используется ли Jetpack.
- Уточнить, есть ли мобильная публикация из WordPress app.
- Посмотреть логи запросов к
/xmlrpc.php. - Выбрать способ отключения: код или сервер.
- После изменений протестировать реальные сценарии публикации.
Если нужен максимально безопасный путь, начните с тестового стенда или staging-копии. Тогда вы увидите, какие интеграции завязаны на XML-RPC, ещё до того, как изменения попадут на рабочий сайт.