XML-RPC в WordPress часто отключают «на всякий случай», а потом внезапно перестают работать мобильное приложение, внешняя публикация, некоторые сервисы мониторинга или старые интеграции. Проблема в том, что это не просто «лишний файл», а точка входа, которую нужно убирать осознанно: либо полностью, либо с учетом того, кто и зачем к ней обращается.
Если задача звучит как «снизить риск атак и убрать ненужный внешний доступ», то правильный подход обычно такой: сначала понять, используется ли XML-RPC вообще, затем отключить его так, чтобы не сломать нужные сценарии, и после этого проверить ответы сервера и логи.
Когда XML-RPC действительно можно отключать
На большинстве обычных сайтов XML-RPC не нужен. Если вы публикуете записи только из админки, не используете старые приложения для удаленной публикации и не подключали внешние сервисы, которые работают через этот протокол, его можно убрать. Но если сайт связан с мобильным приложением WordPress, внешним редактором, автоматизацией публикаций или старым плагином синхронизации, сначала проверьте документацию этого инструмента.
Что обычно ломается после отключения
- мобильное приложение WordPress не может авторизоваться;
- внешние сервисы публикации не отправляют записи;
- некоторые плагины автопостинга теряют канал связи;
- старые интеграции, завязанные на
xmlrpc.php, начинают возвращать 403 или 405.
Диагностика: используется ли XML-RPC сейчас
Перед отключением проверьте, есть ли вообще обращения к /xmlrpc.php. Самый простой способ — посмотреть логи веб-сервера. Если доступа к логам нет, можно временно открыть страницу https://ваш-домен/xmlrpc.php в браузере: при включенном XML-RPC WordPress обычно отвечает сообщением о том, что сервер принимает только POST-запросы. Это не доказывает использование, но подтверждает, что файл доступен.
Полезно также проверить, не обращаются ли к нему боты. Если в логах много запросов к xmlrpc.php с разных IP, это не аргумент в пользу его полезности — чаще это просто сканирование.
Чек-лист перед отключением
- проверить логи на обращения к
/xmlrpc.php; - сверить список активных плагинов на предмет внешней публикации и синхронизации;
- проверить, используется ли мобильное приложение WordPress;
- убедиться, что сайт не подключен к старому сервису автопостинга;
- сделать резервную копию конфигурации и файлов перед изменениями.
Как отключить XML-RPC: три рабочих варианта
Ниже — варианты от самого простого к более контролируемому. Если нужен быстрый результат без правки кода, подойдет плагин. Если важна предсказуемость и минимум лишних зависимостей, лучше использовать код или правила сервера.
| Способ | Плюсы | Минусы | Когда выбирать |
|---|---|---|---|
| Плагин безопасности | Быстро, без правки файлов | Лишняя зависимость, иногда скрытая логика | Если нет доступа к коду или нужен временный вариант |
Фильтр в functions.php | Просто, прозрачно | Зависит от темы, при обновлении можно потерять правку | Если нужен точечный контроль на уровне WordPress |
| Правило на сервере | Режет запросы раньше WordPress | Нужно понимать конфиг Apache/Nginx | Если важна защита и минимальная нагрузка |
Вариант 1. Отключить через код
Самый понятный способ — вернуть false через фильтр xmlrpc_enabled. Это отключает XML-RPC на уровне WordPress, без изменения ядра.
add_filter( 'xmlrpc_enabled', '__return_false' );Если вы не хотите править тему, добавьте этот код в небольшой mu-plugin. Так он не пропадет после обновления темы.
<?php
/**
* Plugin Name: Disable XML-RPC
*/
add_filter( 'xmlrpc_enabled', '__return_false' );Вариант 2. Закрыть доступ на уровне сервера
Если сайт на Apache, можно запретить доступ к xmlrpc.php через .htaccess. Это полезно, когда нужно отрезать запросы до загрузки WordPress.
<Files xmlrpc.php>
Require all denied
</Files>Для Nginx логика зависит от конфигурации, но обычно достаточно отдельного location-блока:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}Если у вас за Nginx стоит еще и CDN или WAF, проверьте, не кэширует ли он ответ на этот URL и не пропускает ли запросы дальше по цепочке.
Вариант 3. Отключить через плагин
Плагины безопасности часто умеют выключать XML-RPC одной галочкой. Это удобно, если на сайте уже есть такой плагин и вы не хотите добавлять еще один слой кода. Но если плагин тяжелый и нужен только ради одной функции, это не лучший компромисс.
Если используете набор инструментов для чистки и защиты сайта, проверьте, не дублирует ли он уже существующие настройки. Например, в Clearfy Pro есть функции, связанные с отключением ненужных возможностей WordPress и сокращением лишних точек входа, но включать все подряд не стоит — сначала смотрите, что именно меняется.
Проверка результата после внедрения
После отключения важно не ограничиваться «страница открывается». Нужно проверить именно поведение xmlrpc.php и связанные сценарии.
Что проверить вручную
- открыть
/xmlrpc.phpв браузере и убедиться, что доступ закрыт или возвращается ожидаемый ответ; - попробовать авторизацию через мобильное приложение WordPress, если оно используется;
- проверить внешние сервисы публикации и автопостинга;
- посмотреть логи сервера на предмет 403/405 и повторных обращений;
- убедиться, что в админке и на фронтенде сайт работает без ошибок.
Если вы закрывали доступ на уровне сервера, хороший признак — отсутствие лишних запросов к PHP и WordPress-ядру. Если отключали фильтром, запрос может доходить до WordPress, но должен завершаться отказом раньше выполнения полезной логики.
Быстрая проверка через curl
Можно проверить ответ напрямую:
curl -I https://example.com/xmlrpc.phpЕсли все настроено жестко, вы увидите 403 или другой отказ. Если сервер отвечает 200, а в теле есть стандартное сообщение WordPress, значит доступ еще не закрыт.
Частые ошибки и почему они возникают
Отключили XML-RPC, а потом перестало работать мобильное приложение
Это типичный сценарий, когда отключение сделали без проверки зависимостей. Решение простое: либо вернуть доступ, либо перевести публикацию на другой канал. Если приложение действительно нужно, не блокируйте XML-RPC полностью — ограничьте его только для ненужных IP или дополнительно защитите авторизацию.
Поставили плагин, но запросы к xmlrpc.php все равно идут
Некоторые плагины отключают только часть функций или блокируют не все способы обращения. В таком случае проверьте, не остался ли доступ на уровне сервера. Если цель — именно закрыть вход, серверное правило надежнее.
Сломали сайт после правки темы
Если код вставили в functions.php активной темы, обновление или смена темы может убрать настройку. Для таких задач лучше использовать mu-plugin или отдельный мини-плагин.
Слишком агрессивно закрыли все запросы к xmlrpc.php
Иногда администраторы блокируют файл на уровне сервера, а потом забывают, что один из сервисов еще работает через него. Перед блокировкой всегда проверяйте реальные интеграции, а не только список установленных плагинов.
Практика безопасности и производительности
Отключение XML-RPC не делает сайт «защищенным полностью», но убирает один из старых векторов атак и уменьшает шум в логах. Это особенно полезно на сайтах, где нет внешней публикации и нет причин держать открытым дополнительный endpoint.
Если задача шире и вы параллельно чистите сайт от лишних функций, смотрите на весь набор точек входа: REST API, неиспользуемые эндпоинты, старые плагины, лишние cron-задачи. Но не отключайте все подряд без проверки — в WordPress слишком легко сломать нужную интеграцию, если действовать вслепую.
Для сайтов с повышенными требованиями к безопасности лучше сочетать несколько мер: закрыть XML-RPC, ограничить логин-атаку, включить двухфакторную аутентификацию и следить за логами. Тогда отключение одного файла будет частью нормальной защиты, а не единственной мерой.