XML-RPC в WordPress до сих пор включён по умолчанию на многих сайтах, хотя в реальных проектах он часто не нужен. Проблема не в самом факте его наличия, а в том, что через xmlrpc.php сайт получает лишнюю точку входа: брутфорс, pingback-спам, лишние запросы от старых клиентов и интеграций. Если вы не используете мобильное приложение WordPress, внешние публикации через старые сервисы или специфические интеграции, этот интерфейс обычно проще отключить.
Ниже — не абстрактная теория, а рабочий сценарий: как понять, нужен ли XML-RPC именно вам, как отключить его без поломки сайта, чем заменить доступ к данным и как проверить, что всё действительно сработало.
Когда XML-RPC стоит отключать, а когда лучше оставить
Сначала полезно отсеять ложные причины. XML-RPC не тормозит сайт сам по себе всегда и везде. Он становится проблемой, когда на него идут регулярные запросы извне или когда сайт не использует функции, завязанные на этот протокол.
Сценарии, где отключение обычно оправдано
- сайт не использует мобильное приложение WordPress;
- нет внешних сервисов, которые публикуют записи через XML-RPC;
- в логах видно много запросов к
/xmlrpc.php; - на сайте регулярно появляются попытки брутфорса через XML-RPC;
- pingback и trackback не нужны как механизм уведомлений.
Когда лучше не спешить
Если у вас есть старый сервис автопостинга, интеграция с десктопным клиентом или нестандартная связка с внешней системой, сначала проверьте, умеет ли она работать через REST API. В некоторых проектах XML-RPC всё ещё используется по инерции, и отключение без проверки ломает публикацию контента или синхронизацию черновиков.
Диагностика: как понять, что XML-RPC реально используется
Самый практичный способ — посмотреть логи веб-сервера или мониторинг безопасности. Если доступа к логам нет, можно проверить поведение вручную. Откройте https://example.com/xmlrpc.php в браузере: если файл доступен, WordPress обычно отвечает сообщением о том, что XML-RPC сервер принимает только POST-запросы. Это не признак проблемы, а просто подтверждение, что endpoint открыт.
Дальше проверьте, есть ли обращения в access log. Пример для Nginx:
grep