XML-RPC в WordPress часто отключают «на всякий случай», а потом внезапно перестают работать мобильное приложение, внешняя публикация записей или некоторые интеграции. С другой стороны, оставлять его открытым без необходимости тоже не лучшая идея: этот интерфейс нередко используют для перебора паролей и лишней нагрузки на сайт.
Ниже — практический разбор: как понять, нужен ли вам XML-RPC, как отключить его полностью или ограничить точечно, и как проверить, что после изменений ничего не сломалось.
Когда XML-RPC действительно нужен
XML-RPC — это старый удалённый интерфейс WordPress. Он до сих пор используется в нескольких сценариях:
- мобильное приложение WordPress;
- публикация через внешние клиенты и редакторы;
- некоторые сервисы автопостинга и мониторинга;
- удалённые интеграции, которые не переведены на REST API.
Если у вас обычный сайт без внешней публикации и без старых интеграций, XML-RPC чаще всего не нужен. Но если редакторы работают через приложение или контент приходит из внешней системы, отключать его вслепую не стоит.
Диагностика: как понять, используется ли XML-RPC
Первый шаг — не менять конфигурацию, пока не проверите фактическое использование. Самый простой способ — посмотреть логи доступа веб-сервера и найти запросы к /xmlrpc.php. Если таких запросов нет, а в проекте не используется мобильное приложение WordPress и внешняя публикация, риск отключения ниже.
Ещё один практичный тест — открыть https://example.com/xmlrpc.php в браузере. Если интерфейс доступен, WordPress обычно отвечает сообщением о том, что XML-RPC сервер принимает только POST-запросы. Это не доказывает, что он нужен, но подтверждает, что файл доступен извне.
Что проверить до изменений
- используется ли мобильное приложение WordPress;
- есть ли внешние сервисы публикации или синхронизации;
- есть ли плагины, которые обращаются к XML-RPC;
- не завязана ли на него старая интеграция с CRM или планировщиком постов;
- нет ли в логах регулярных запросов к
xmlrpc.php.
Как отключить XML-RPC полностью
Если интерфейс не нужен, самый надёжный вариант — запретить доступ на уровне WordPress. Для этого можно использовать фильтр xmlrpc_enabled. Он возвращает false, и WordPress перестаёт обслуживать XML-RPC-запросы.
<?php
add_filter( 'xmlrpc_enabled', '__return_false' );Код можно добавить в плагин для сайта или в functions.php дочерней темы. Для боевого проекта я бы предпочёл отдельный мини-плагин: так решение не потеряется при смене темы.
Если у вас есть доступ к конфигурации веб-сервера, можно дополнительно закрыть сам файл на уровне сервера. Это полезно как второй слой защиты, но не заменяет проверку интеграций.
Вариант через .htaccess для Apache
<Files xmlrpc.php>
Require all denied
</Files>Для Nginx обычно используют отдельное правило в конфигурации сайта:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}Важно: серверное правило имеет смысл только если вы уверены, что XML-RPC нигде не нужен. Иначе вы отключите не только атаки, но и рабочие запросы.
Как ограничить XML-RPC, если он нужен частично
Иногда полностью отключать интерфейс нельзя. Например, редакторы публикуют записи из мобильного приложения, но вы хотите убрать только лишние методы или снизить риск перебора паролей. В таком случае лучше не рубить всё целиком, а ограничить доступ на уровне логики входа.
Один из рабочих подходов — блокировать XML-RPC-аутентификацию для подозрительных попыток через фильтр xmlrpc_login_error. Это не отменяет сам интерфейс, но позволяет не раскрывать лишнюю информацию при неудачном входе.
<?php
add_filter( 'xmlrpc_login_error', function( $error ) {
return new IXR_Error( 403, 'XML-RPC authentication is disabled.' );
} );Если задача — именно снизить поверхность атаки, а не сохранить старые интеграции любой ценой, этого может быть достаточно в сочетании с ограничением по IP на уровне сервера или WAF.
Сравнение подходов: плагин, код или сервер
| Подход | Когда подходит | Плюс | Минус |
|---|---|---|---|
Фильтр xmlrpc_enabled | Нужно отключить XML-RPC в WordPress | Просто и прозрачно | Не закрывает запросы раньше уровня WordPress |
| Правило в Apache/Nginx | Нужна жёсткая блокировка на сервере | Срезает лишнюю нагрузку | Можно сломать интеграции, если не проверить зависимости |
| Ограничение логики входа | XML-RPC нужен частично | Сохраняет рабочие сценарии | Не убирает сам интерфейс полностью |
Если у вас сайт на управляемом хостинге, иногда проще и безопаснее начать с серверного правила в тестовой среде, а затем уже переносить решение в продакшен после проверки.
Пошаговое решение без сюрпризов
- Проверьте, используется ли XML-RPC в реальных сценариях.
- Сделайте резервную копию или подготовьте быстрый откат.
- Выберите способ: отключение через фильтр или блокировка на сервере.
- Внесите изменение сначала на staging, если он есть.
- Проверьте вход через мобильное приложение и внешние интеграции.
- Посмотрите логи на предмет ошибок и повторных запросов к
xmlrpc.php.
Если у вас несколько сайтов на одном сервере, не копируйте правило вслепую. Для каждого проекта может быть свой набор интеграций и свой риск поломки.
Как проверить, что решение сработало
Проверка должна быть не формальной, а прикладной. После отключения или ограничения XML-RPC сделайте три вещи.
- Откройте
/xmlrpc.phpв браузере и убедитесь, что доступ закрыт или ответ изменился ожидаемым образом. - Попробуйте авторизоваться через мобильное приложение WordPress, если оно используется.
- Проверьте внешние сервисы публикации или синхронизации, которые были подключены раньше.
Если вы блокировали файл на сервере, в логах должны исчезнуть успешные обращения к xmlrpc.php. Если вы использовали фильтр WordPress, проверьте, что сайт не начал сыпать ошибками в журнале PHP.
Мини-проверка через curl
Можно отправить тестовый POST-запрос и посмотреть код ответа:
curl -I -X POST https://example.com/xmlrpc.phpЕсли интерфейс закрыт корректно, вы не должны получать обычный рабочий ответ XML-RPC. Конкретный код зависит от того, где именно вы заблокировали доступ: на уровне WordPress, веб-сервера или WAF.
Частые ошибки и как их исправить
Самая распространённая ошибка — отключить XML-RPC без инвентаризации интеграций. После этого ломается не только приложение, но и сторонний сервис, о котором уже забыли.
- Ошибка: закрыли
xmlrpc.phpв Nginx, а редакторы жалуются на публикацию.
Причина: один из рабочих процессов всё ещё использует XML-RPC.
Что делать: вернуть доступ и проверить, какой сервис делает запросы. - Ошибка: добавили код в тему, потом сменили тему и защита исчезла.
Причина: решение было привязано кfunctions.phpактивной темы.
Что делать: перенести код в отдельный плагин. - Ошибка: поставили плагин, который «отключает XML-RPC», но он конфликтует с другими настройками безопасности.
Причина: плагин делает больше, чем нужно, и может менять поведение входа или REST API.
Что делать: оставить точечное решение через код или серверное правило. - Ошибка: ориентируются только на отсутствие жалоб пользователей.
Причина: внешняя интеграция может падать тихо, без заметного уведомления.
Что делать: смотреть логи и тестировать реальные сценарии.
Практические советы по безопасности и производительности
Если XML-RPC вам не нужен, его отключение — это не только про безопасность, но и про снижение лишнего шума в логах. Однако не стоит считать это полноценной защитой сайта. Для WordPress важнее общий набор мер: актуальные обновления, ограничение попыток входа, нормальные пароли, двухфакторная аутентификация для админов и контроль прав пользователей.
Если вы хотите упростить техническую чистку сайта и убрать лишние дубли, служебные страницы и часть мусора, иногда удобнее использовать специализированные инструменты вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже в этом случае сначала проверьте, что именно вы отключаете и не затрагиваете рабочие интеграции.
Для сайтов с высокой нагрузкой имеет смысл дополнительно ограничить частоту запросов к xmlrpc.php на уровне WAF или сервера. Это особенно полезно, если в логах видно много однотипных POST-запросов, но полностью закрывать интерфейс нельзя.
Если нужен аккуратный и воспроизводимый результат, держите решение в коде или конфигурации, а не в случайном наборе плагинов. Тогда вы сможете быстро понять, что именно изменилось, и так же быстро откатить правку при необходимости.