XML-RPC в WordPress — это мощный инструмент, позволяющий выполнять удалённые операции с сайтом, такие как публикация записей и управление контентом через внешние приложения. Однако он часто становится причиной проблем с безопасностью, например, используется для DDoS-атак, перебора паролей и других уязвимостей. В этой статье подробно разберём, как отключить XML-RPC в WordPress без плагинов, чтобы повысить безопасность сайта, не нагружая систему дополнительными расширениями.
Что такое XML-RPC и почему его стоит отключать?
XML-RPC — это протокол удалённого вызова процедур, встроенный в WordPress с версии 3.5. Он позволяет взаимодействовать с сайтом через сторонние приложения, например, мобильные клиенты, редакторы и сервисы публикации.
Проблема в том, что многие злоумышленники используют XML-RPC для проведения атак:
- Брутфорс — перебор паролей с помощью метода
system.multicall. - DDoS — отправка большого количества запросов к XML-RPC для перегрузки сервера.
- Возможные уязвимости в реализации протокола.
Если вы не используете мобильные приложения для публикации на сайте и не планируете интеграции с внешними сервисами через XML-RPC, то отключение этого протокола — один из лучших способов повысить безопасность.
Как проверить, активен ли XML-RPC на сайте?
Чтобы убедиться, что XML-RPC включён, достаточно перейти по адресу https://ваш-домен.ru/xmlrpc.php. Если вы видите сообщение «XML-RPC server accepts POST requests only.», значит протокол активен.
Ещё один способ — использовать утилиты типа curl:
curl -I https://ваш-домен.ru/xmlrpc.php
Если статус 405 (Method Not Allowed) или 200, значит файл доступен и работает.
Методы отключения XML-RPC без использования плагинов
1. Отключение через файл functions.php
Самый простой способ — добавить в тему или дочернюю тему следующий код, который полностью отключит XML-RPC, возвращая ошибку при попытке обращения:
function wphost_disable_xmlrpc($methods) {
return [];
}
add_filter('xmlrpc_enabled', '__return_false');
add_filter('xmlrpc_methods', 'wphost_disable_xmlrpc');
Этот код отключает XML-RPC на уровне WordPress, предотвращая обработку любых запросов.
2. Блокировка доступа к файлу xmlrpc.php через .htaccess
Если ваш сайт работает на сервере Apache, можно запретить доступ к файлу xmlrpc.php через файл .htaccess. Для этого добавьте следующий код в корневую папку сайта:
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
Этот метод самый надёжный и не влияет на работу WordPress, так как запросы к xmlrpc.php просто блокируются на уровне веб-сервера.
3. Отключение через Nginx
Если ваш сайт работает на Nginx, добавьте в конфигурацию сервера следующий блок внутри server { }:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
После внесения изменений не забудьте перезапустить Nginx.
Как проверить, что XML-RPC отключён?
После применения одного из методов повторите проверку через https://ваш-домен.ru/xmlrpc.php. Теперь страница должна выдавать ошибку 403 Forbidden или другую ошибку доступа.
Также можно использовать онлайн-инструменты для проверки уязвимостей, например WPScan, которые покажут, что XML-RPC заблокирован.
Дополнительные рекомендации по безопасности WordPress
Отключение XML-RPC — это только один из способов повысить безопасность, особенно если вы не используете мобильные приложения для управления сайтом. Для комплексной защиты рекомендуем:
- Использовать плагин Clearfy Pro для оптимизации и безопасной настройки WordPress.
- Ограничивать попытки входа с помощью плагинов типа Limit Login Attempts.
- Регулярно обновлять ядро, темы и плагины.
- Использовать двухфакторную аутентификацию.
Можно ли отключать XML-RPC, если используются мобильные приложения?
Если вы управляете сайтом через официальное приложение WordPress для iOS или Android, либо через сторонние сервисы, отключение XML-RPC приведёт к потере этой функциональности. В таком случае лучше ограничить доступ к xmlrpc.php через .htaccess или Nginx только для подозрительных IP или использовать плагин, который блокирует атаки, а не отключает протокол полностью.
Пример условной блокировки xmlrpc.php по IP в .htaccess
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from 123.123.123.123
</Files>
Замените 123.123.123.123 на IP, с которого вы хотите разрешить доступ.