Отключение XML-RPC в WordPress: что это, почему и как защитить сайт

Что такое XML-RPC и зачем он нужен
WordPress создан как веб-приложение: PHP-скрипты рендерят HTML, который браузер получает и отображает. Но иногда нужно управлять сайтом не через браузер — например, мобильное приложение или внешняя панель управления. XML-RPC — это устаревший стандарт API, который оборачивает запросы и ответы в простой XML и позволяет удалённо выполнять типичные действия: создавать посты, редактировать, получать список и т.д.

Коротко: XML-RPC экономит трафик и упрощает работу сторонних приложений. Но для аутентификации он традиционно использует передачу имени пользователя и пароля в каждом запросе — это приносит риски.
Определение: XML-RPC — простой протокол удалённого вызова процедур, использующий XML для кодирования сообщений.
Какими угрозами пользуются злоумышленники
XML-RPC увеличивает уязвимость сайта по двум главным направлениям: подбор паролей (brute-force) и перехват/кража учётных данных. Ниже — подробное объяснение и примеры поведения атак.
Подбор паролей (brute force)
Brute force — это метод, при котором автоматизированные боты перебирают комбинации логина и пароля. В отличие от стандартной формы входа, на которой можно задать ограничение попыток (rate limiting), XML-RPC позволяет шифрованным или частично маскированным запросам обходить такие ограничения. Злоумышленник может отправлять тысячи запросов в секунду через xmlrpc.php, подсовывая разные пароли, и сервер может не отсекать эти попытки как «логин с формы», если не настроено дополнительное ограничение.
Риски:
- Бесконечные попытки подбора без механизма блокировки.
- Перегрузка сервера за счёт большого количества удалённых запросов (DDoS через pingback).

Перехват и кража учётных данных
Каждый XML-RPC-запрос часто содержит имя пользователя и пароль. При отсутствии надёжного TLS/HTTPS или при наличии брешей в сетевой инфраструктуре эти пакеты можно перехватить. После захвата валидных учётных данных злоумышленнику не нужно больше подбирать пароли — он получает прямой доступ.

Важно: если вы используете HTTPS и надёжные пароли, риск перехвата снижается, но не исчезает при наличии уязвимостей на сервере или в сторонних интеграциях.
Следует ли отключать XML-RPC?
Начиная с WordPress 3.5 код XML-RPC стал более устойчивым, и разработчики включили его по умолчанию. Решение об отключении должно опираться на конкретные сценарии использования:
Когда не стоит отключать XML-RPC:
- Вы активно пользуетесь мобильными приложениями, которые управляют сайтом.
- Установлен и используется Jetpack (он опирается на xmlrpc для связи).
- В вашей инфраструктуре есть внешние CRM/интеграции, использующие xmlrpc.
Когда имеет смысл отключить:
- Вы не используете мобильные клиенты и не подключали внешние сервисы.
- Хотите дополнительно ограничить вектор атак на сайт и упростить защиту.
Подготовка перед отключением: мини-методология
- Инвентаризация: проверьте плагины и темы на вызовы XML-RPC.
- Бэкап: сделайте резервную копию файлов и базы данных.
- Тестирование: отключайте в staging/тестовой среде до продакшена.
- Мониторинг: включите логирование и оповещения на случай всплеска ошибок.
Как отключить XML-RPC в WordPress
Важно: Jetpack требует XML-RPC. Если вы используете Jetpack, отключать нельзя.
Способ 1 — отключение через functions.php
- Откройте папку темы (обычно wp-content/themes/) и файл functions.php.
- Добавьте в конец файла следующий код и сохраните:
// Disable use XML-RPC
add_filter('xmlrpc_enabled','__return_false');Этот метод отключает функциональность на уровне ядра WordPress, но файл xmlrpc.php при этом остаётся доступен и может продолжать принимать запросы — поэтому лучше дополнительно блокировать сам файл на уровне сервера.
Способ 2 — блокировка доступа к xmlrpc.php на уровне сервера
Блокировка на уровне веб-сервера — более надёжный способ, так как запросы не доходят до PHP и не потребляют ресурсы приложения.
Apache (в .htaccess или конфигурации виртуального хоста):
# Запретить все запросы к xmlrpc.php для этого домена
Order Deny,Allow
Deny from all
Nginx (в конфигурации сервера или location):
# Блокировка запросов к xmlrpc.php
location = /xmlrpc.php {
deny all;
return 444;
}Примечание: директива return 444 в Nginx быстро закрывает соединение; при необходимости можно возвращать 403.
Проверка после отключения
- Откройте https://your-site.com/xmlrpc.php — корректный ответ после блокировки обычно будет 403/444 или отсутствовать соединение.
- Проверьте логи сервера на попытки доступа к xmlrpc.php.
- Убедитесь, что мобильные клиенты и интеграции продолжают работать (если они были нужны — протестируйте).
Контрпримеры и случаи, когда отключение не решит проблему
- Если уязвимость в плагине или теме позволяет выполнение кода, отключение XML-RPC только частично снижает риск.
- Если злоумышленник уже получил доступ к админ-учётной записи (крадут cookie, токены, SSH ключи), блокировка XML-RPC не помешает дальнейшей атаке.
- Если ваши интеграции используют REST API или OAuth, отключение XML-RPC не закрывает эти каналы.
Альтернативные подходы к защите (вместо полного отключения)
- Ограничить доступ к xmlrpc.php по IP (только доверенные IP).
- Использовать двухфакторную аутентификацию (2FA) для всех админов.
- Включить Web Application Firewall (WAF) — блокирует известные вредоносные паттерны.
- Настроить rate limiting (лимиты запросов) на уровне Nginx/Cloudflare.
- Перейти на REST API с авторизацией через OAuth, если нужны внешние интеграции.
Чек-лист по ролям
Для администратора сайта:
- Сделать бэкап перед изменениями.
- Проверить, не зависит ли от XML-RPC ни один плагин.
- Установить 2FA и сильные пароли.
Для разработчика:
- Тестировать изменения в staging.
- Проверить и при необходимости исправить обращение к XML-RPC в коде.
- Реализовать логирование и оповещения об ошибках.
Для хостинг-провайдера или инженера инфраструктуры:
- Настроить блокировку на уровне веб-сервера.
- Включить rate limiting и WAF.
- Добавить мониторинг доступности и предупреждения о повышенной нагрузке.
Таблица сравнения: Apache vs Nginx блокировка
- Apache: блокирует на уровне .htaccess или виртуального хоста, легко задать через
. - Nginx: блокировка на уровне location быстрее — запрос не запускает PHP.
Практическая рекомендация: если есть доступ к конфигурации сервера, блокируйте на уровне веб-сервера (Nginx/Apache), а не только в functions.php.
Критерии приёмки
- При обращении к /xmlrpc.php возвращается 403/444 или соединение закрывается.
- Логи не показывают успешных авторизаций через xmlrpc.php.
- Все бизнес-критичные интеграции работают (если они требуются).
- Наблюдается снижение количества подозрительных попыток входа (если были такие до изменений).
План отката (rollback)
- Восстановить резервную копию functions.php или удалить добавленный код.
- Удалить правила блокировки из конфигурации сервера и перезагрузить его.
- Проверить доступ интеграций и сообщить командам, зависящим от API.
Тесты и приёмочные сценарии
Тест 1 — Проверка блокировки:
- Шаги: выполнить GET https://your-site.com/xmlrpc.php.
- Ожидаемый результат: 403/444 или другая индикативная ошибка, не 200.
Тест 2 — Проверка работы админки:
- Шаги: выполнить вход в панель администратора.
- Ожидаемый результат: вход работает без сбоев.
Тест 3 — Проверка интеграций:
- Шаги: инициировать операцию из мобильного приложения или внешней панели, если применимо.
- Ожидаемый результат: операция либо выполняется (если интеграция не зависит от XML-RPC), либо корректно падает с понятной ошибкой для владельцев интеграции.
Матрица рисков и меры смягчения
- Риск: подбор паролей через xmlrpc.php. Меры: блокировка на уровне сервера, rate limiting, 2FA.
- Риск: перехват учётных данных. Меры: обязательный HTTPS, проверка цепочки сертификатов, удаление устаревших протоколов (TLS 1.0/1.1).
- Риск: потеря функциональности интеграций. Меры: инвентаризация, уведомление заинтересованных команд, тестирование перед выкатом.
Snippets / Шпаргалка администратору
Отключить через functions.php:
// Disable use XML-RPC
add_filter('xmlrpc_enabled','__return_false');Apache (.htaccess):
Order Deny,Allow
Deny from all
Nginx:
location = /xmlrpc.php {
deny all;
return 444;
}Быстрый обзор: когда отключать, а когда — нет
- Отключайте, если не используете мобильные клиенты, Jetpack и интеграции.
- Не отключайте, если доверенные внешние сервисы требуют xmlrpc.
- Рассмотрите альтернативы: ограничение по IP, WAF, 2FA.
Примерный план действий (SOP)
- Инвентаризация зависимостей.
- Бэкап.
- Отключение в тестовой среде (functions.php + блокировка сервера).
- Тестирование интеграций.
- Выкат на продакшен в окно технического обслуживания.
- Мониторинг и логирование.
Решающее правило (эмпирический хинт)
Если вы не уверены, что xmlrpc необходим — лучше временно отключить и наблюдать за влиянием в течение 48–72 часов. Если ничего критичного не сломается, оставьте блокировку.
Визуальная подсказка: простое дерево принятия решения
flowchart TD
A[Нужен удалённый доступ к сайту?] -->|Да| B[Используется Jetpack или мобильные клиенты?]
A -->|Нет| C[Отключить XML-RPC]
B -->|Да| D[Не отключать, настроить 2FA и WAF]
B -->|Нет| CКраткое резюме
- XML-RPC даёт удобную возможность удалённого управления сайтом, но увеличивает поверхность атаки.
- Если вы не используете зависимости от XML-RPC, блокировка файла xmlrpc.php на уровне сервера — простая и эффективная мера безопасности.
- Всегда тестируйте изменения в staging, делайте бэкапы и применяйте дополнительные меры: HTTPS, 2FA и WAF.




Внедрив блокировку или отключение XML-RPC, вы закроете один из распространённых векторов атак и уменьшите нагрузку на сервер. Следуйте чек-листу, тестируйте изменения и держите команду в курсе.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента