XML-RPC в WordPress часто отключают «на всякий случай», а потом внезапно ломают мобильное приложение, удалённую публикацию или интеграцию с внешним сервисом. Если задача не абстрактная, а практическая, сначала стоит понять, используется ли xmlrpc.php вообще, и только потом резать доступ.
Ниже — рабочие способы отключения, варианты для сервера и темы, а также проверка результата без гадания по логам.
Когда XML-RPC стоит отключать, а когда нет
Файл xmlrpc.php нужен для старых сценариев удалённой работы с сайтом: публикация через внешние клиенты, некоторые мобильные приложения, интеграции с сервисами, которые до сих пор опираются на XML-RPC. Если вы этим не пользуетесь, оставлять его открытым смысла мало: это лишняя поверхность атаки и лишний шум в логах.
Но если сайт подключён к сервису, который делает запросы через XML-RPC, простое блокирование приведёт к ошибкам авторизации или к тому, что публикации перестанут уходить. Поэтому задача не в том, чтобы «выключить всё», а в том, чтобы отключить только ненужный доступ.
Что проверить до изменений
- Используется ли мобильное приложение WordPress для публикации.
- Есть ли внешние сервисы автопостинга или синхронизации, которые работают через XML-RPC.
- Нужны ли pingback и trackback именно на этом сайте.
- Есть ли в логах обращения к
/xmlrpc.phpот ботов или сканеров.
Диагностика: как понять, что XML-RPC реально используется
Самый надёжный способ — посмотреть логи веб-сервера или статистику запросов. Если у вас nginx, ищите обращения к /xmlrpc.php. На Apache — то же самое в access log. Если запросы идут только от ботов с ошибками авторизации, это хороший кандидат на отключение.
Ещё один практичный тест — временно ограничить доступ и посмотреть, не появились ли ошибки в интеграциях. Делать это лучше на staging-копии или в окно низкой нагрузки.
Признаки, что XML-RPC можно отключать
- Вы не используете удалённую публикацию.
- Ни один сервис не жалуется на ошибки подключения к WordPress.
- В логах есть только мусорные запросы к
xmlrpc.php. - Пингбеки и трекбеки на сайте не нужны.
Пошаговое решение: как отключить XML-RPC
Есть три рабочих подхода: через код, через сервер и через плагин безопасности. Для точечной задачи чаще всего достаточно кода или правила на сервере. Плагин удобен, если вы уже используете его для других ограничений.
| Способ | Плюсы | Минусы |
|---|---|---|
| Код в теме или mu-plugin | Контроль на уровне WordPress, легко откатить | Не блокирует сам файл на уровне веб-сервера |
| Правило в nginx/Apache | Режет доступ раньше WordPress, меньше нагрузки | Нужно аккуратно править конфиг |
| Плагин безопасности | Быстро включить без кода | Лишняя зависимость от плагина |
Вариант 1: отключить XML-RPC через код
Если нужен именно WordPress-уровень, добавьте фильтр в functions.php дочерней темы или, лучше, в небольшой mu-plugin. Так проще не потерять настройку при смене темы.
<?php
add_filter( 'xmlrpc_enabled', '__return_false' );Этот вариант отключает XML-RPC для WordPress, но сам файл xmlrpc.php всё ещё будет отвечать на уровне веб-сервера. Для большинства сайтов этого достаточно, но если вы хотите убрать и сам доступ к файлу, лучше добавить серверное правило.
Вариант 2: заблокировать xmlrpc.php на уровне nginx
Если сайт работает на nginx, можно отдать 403 на прямые обращения к файлу. Это полезно, когда вы хотите не просто отключить функциональность, а ещё и сократить лишние запросы.
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}После изменения конфига проверьте синтаксис и перезагрузите nginx штатным способом. Не редактируйте конфиг вслепую на боевом сервере без бэкапа.
Вариант 3: блокировка в Apache через .htaccess
Если сайт на Apache, можно закрыть файл через .htaccess. Это не самый изящный вариант, но он рабочий и часто используется на хостингах, где нет доступа к основному конфигу.
<Files xmlrpc.php>
Require all denied
</Files>Если сервер старый и директива Require не поддерживается, хостинг может использовать другую схему доступа. В таком случае лучше уточнить версию Apache и не вставлять правила наугад.
Как не сломать нужные интеграции
Главная ошибка — отключить XML-RPC и потом искать, почему перестала работать удалённая публикация или сторонний сервис. Чтобы этого избежать, сначала проверьте реальные сценарии использования.
Если у вас есть интеграция, которая зависит от XML-RPC, лучше не отключать его полностью, а ограничить доступ по IP или закрыть только те методы, которые вам не нужны. Но это уже более тонкая настройка и требует понимания конкретного сервиса.
Чек-лист перед выкладкой на прод
- Сделан бэкап файлов и базы.
- Проверен staging или тестовый домен.
- Понятно, какие сервисы используют XML-RPC.
- Есть способ быстро откатить правило.
- Проверены логи после изменения.
Проверка результата после внедрения
После отключения не ограничивайтесь открытием главной страницы. Нужно проверить именно тот путь, который вы закрывали.
Самый простой тест — запросить /xmlrpc.php в браузере или через curl. Если блокировка на сервере настроена правильно, вы увидите 403 или другой отказ в доступе. Если отключение сделано только через фильтр WordPress, файл может отвечать, но XML-RPC-функции будут недоступны.
curl -I https://example.com/xmlrpc.phpДальше проверьте админку, публикацию записей и внешние интеграции. Если что-то завязано на XML-RPC, ошибка проявится сразу: либо в интерфейсе сервиса, либо в логах, либо при попытке отправить запись.
Что считать успешным результатом
- Запросы к
xmlrpc.phpбольше не проходят без нужды. - Сайт работает штатно, админка не ломается.
- Нужные интеграции либо подтверждённо не используют XML-RPC, либо перенастроены.
- В логах стало меньше мусорных обращений к этому файлу.
Частые ошибки и как их исправить
Отключили XML-RPC, но забыли про внешние сервисы
Причина простая: правило добавили без инвентаризации интеграций. Исправление тоже простое — вернуть доступ, проверить, какой сервис ломается, и либо оставить XML-RPC включённым, либо заменить интеграцию на другой способ.
Спрятали проблему плагином, но не закрыли файл на сервере
Плагин может отключить функциональность WordPress, но не всегда убирает сам доступ к xmlrpc.php. Если цель — снизить нагрузку и убрать лишние запросы, серверное правило надёжнее.
Правило в .htaccess сломало сайт на нестандартном хостинге
На некоторых конфигурациях Apache директивы могут отличаться. Если после правки появились 500 ошибки, откатите файл и проверьте синтаксис. Лучше вносить такие изменения через staging и только потом переносить на прод.
Отключили XML-RPC и не проверили кэш
Если у вас стоит кэш на уровне плагина или CDN, старые ответы могут сохраняться. После изменений очистите кэш, иначе можно получить ложное ощущение, что правило не сработало.
Безопасность и производительность: что ещё имеет смысл сделать рядом
Если вы уже чистите поверхность атаки, имеет смысл посмотреть и на другие лишние точки входа. Не надо превращать это в бесконечный аудит, но базовые вещи проверить стоит: актуальность ядра, тем и плагинов, ограничение доступа к админке, наличие резервных копий.
Для сайтов, где важна техническая чистота, полезно держать под рукой инструменты, которые помогают убирать лишние элементы и дубли. Например, Clearfy Pro уместен как набор точечных настроек для чистки WordPress и SEO-технических мелочей: https://wpshop.ru/plugins/clearfy?utm_source=wp-blog.ru&utm_medium=article&utm_campaign=otklyuchit-xmlrpc-v-wordpress. Но даже с плагином важно понимать, что именно он меняет, а не включать всё подряд.
Если нужен минимальный и предсказуемый подход, код или серверное правило обычно надёжнее. Плагин удобен там, где вы хотите быстро собрать несколько технических правок в одном месте, но это уже вопрос процесса, а не магии.
Коротко: что делать на практике
Если XML-RPC не используется, отключайте его осознанно: сначала проверьте интеграции, потом выберите способ блокировки, затем протестируйте доступ и логи. Для большинства сайтов достаточно фильтра xmlrpc_enabled или правила на сервере. Если есть внешние сервисы, не закрывайте файл вслепую — сначала убедитесь, что они не завязаны на этот механизм.