Зачем отключать XML-RPC в WordPress и какие бывают риски
XML-RPC — протокол удалённого доступа к сайту WordPress. Он позволяет приложениям и сервисам взаимодействовать с сайтом: например, публикация записей со смартфона, подключение внешних сервисов и плагинов. Однако XML-RPC часто становится целью для атак типа DDoS, перебора паролей и других уязвимостей.
Полное отключение XML-RPC повышает безопасность, но может повлечь потерю важных функций. Часто пользователи сталкиваются с задачей — отключить уязвимые методы, сохранив работоспособность нужных функций.
Диагностика: как проверить, активен ли XML-RPC и какие методы вызываются
Для проверки доступности XML-RPC откройте в браузере URL https://ваш-сайт.com/xmlrpc.php. Если видите сообщение «XML-RPC server accepts POST requests only.», значит протокол активен.
Проверить какие методы вызываются можно с помощью плагинов для логирования или анализа запросов, например, Query Monitor с включением мониторинга HTTP-запросов, либо через серверные логи.
Пошаговое отключение уязвимых методов XML-RPC
1. Отключение всех методов, кроме необходимых
Используем фильтр xmlrpc_methods, чтобы убрать уязвимые методы, например pingback.ping, который часто используется для DDoS-атак.
add_filter('xmlrpc_methods', function($methods) {
unset($methods['pingback.ping']);
unset($methods['pingback.extensions.getPingbacks']);
// Оставляем другие методы для работы мобильных приложений и плагинов
return $methods;
});2. Полное отключение XML-RPC с сохранением REST API
Если XML-RPC не используется, можно полностью заблокировать доступ к xmlrpc.php через functions.php или плагин-сниппет:
add_filter('xmlrpc_enabled', '__return_false');Этот способ отключает протокол, но не влияет на REST API, что важно для большинства современных интеграций.
3. Блокировка доступа к xmlrpc.php на уровне сервера
Дополнительно можно закрыть доступ через .htaccess (для Apache):
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>Или в nginx конфигурации:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}Но такой метод блокирует весь XML-RPC, что может сломать некоторые интеграции.
Проверка результата: как убедиться, что XML-RPC отключён или ограничен
- Попробуйте открыть
https://ваш-сайт.com/xmlrpc.php— если видите ошибку 403 или пустой ответ, значит доступ заблокирован. - Используйте утилиту
curlдля отправки запроса:
curl -d '' https://ваш-сайт.com/xmlrpc.php- Если в ответе ошибка или пусто, значит протокол недоступен.
- Для проверки удалённых публикаций можно использовать мобильное приложение WordPress или плагин, чтобы убедиться, что нужные методы работают.
Частые ошибки при отключении XML-RPC и как их исправить
- Ошибка: Полное отключение через
.htaccessблокирует REST API — решение: используйте фильтрxmlrpc_enabledвместо блокировки на уровне сервера. - Ошибка: Отключение
pingback.pingломает некоторые SEO-плагины — решение: проверьте совместимость плагинов с отключением XML-RPC, обновите их или замените. - Ошибка: Попытка отключить XML-RPC через плагины приводит к конфликтам — решение: реализуйте отключение через код, избегая избыточных плагинов.
Практические советы по безопасности и производительности
- Отключайте XML-RPC, если не используете мобильные приложения или внешние сервисы, чтобы уменьшить поверхность атаки.
- Используйте фильтр
xmlrpc_methodsдля точечного контроля, а не блокируйте полностью, если нужны интеграции. - Включите двухфакторную аутентификацию для пользователей с правами публикации, чтобы предотвратить подбор паролей через XML-RPC.
- Мониторьте логи сервера на предмет подозрительной активности, связанной с
xmlrpc.php.
Сравнение способов отключения XML-RPC
| Способ | Плюсы | Минусы | Рекомендуется для |
|---|---|---|---|
Фильтр xmlrpc_methods | Точный контроль, сохраняет нужные методы | Требует понимания, какие методы нужны | Сайты с частичным использованием XML-RPC |
Фильтр xmlrpc_enabled | Простое отключение, сохраняет REST API | Полностью блокирует XML-RPC, возможна потеря функционала | Сайты без мобильных приложений и внешних сервисов |
| Блокировка через .htaccess/nginx | Полная блокировка на уровне сервера | Может сломать REST API и интеграции | Максимальная безопасность, если не нужны XML-RPC и REST API |