XML-RPC — это протокол, который позволяет взаимодействовать с WordPress удалённо, например, через мобильные приложения или внешние сервисы. Однако он часто становится причиной уязвимостей и атак, таких как перебор паролей (brute force), DDoS и другие вредоносные действия. В этой статье мы подробно рассмотрим, как эффективно защитить WordPress от атак через XML-RPC, используя готовые решения и собственные разработки с примерами кода.
Что такое XML-RPC и почему он опасен для WordPress
XML-RPC — это интерфейс, который был внедрён в WordPress для удалённого управления сайтом. Он позволяет выполнять запросы к сайту, например, публиковать записи, редактировать их, загружать файлы. Однако злоумышленники используют этот механизм для проведения атак.
Основные угрозы, связанные с XML-RPC:
- Brute force атаки — XML-RPC позволяет отправлять множество запросов на авторизацию за один HTTP-запрос (метод
system.multicall), что значительно упрощает подбор паролей. - DDoS-атаки — чрезмерные обращения к XML-RPC могут перегрузить сервер.
- Использование уязвимостей — некоторые плагины или темы могут неправильно обрабатывать данные, полученные через XML-RPC, что открывает двери для инъекций и других атак.
Поэтому важно контролировать доступ к XML-RPC или при необходимости полностью его отключать.
Как проверить, включён ли XML-RPC на вашем сайте WordPress
Проверить доступность XML-RPC очень просто. В браузере или через curl выполните запрос к URL https://ваш-сайт.ru/xmlrpc.php. Если ответ будет с кодом 405 или 403 и текстом с ошибкой, значит доступ ограничен или файл отключён. Если же вы видите сообщение типа 'XML-RPC server accepts POST requests only.', значит XML-RPC активен.
Пример проверки через командную строку:
curl -I https://ваш-сайт.ru/xmlrpc.php
Ответ с кодом 200 говорит о том, что XML-RPC активен.
Методы защиты XML-RPC в WordPress
Отключение XML-RPC полностью
Если вы не используете мобильные приложения WordPress или внешние сервисы, можно полностью отключить XML-RPC. Для этого добавьте в файл functions.php вашей темы или в файл основного плагина следующий код:
function wpscan_disable_xmlrpc() {
add_filter('xmlrpc_enabled', '__return_false');
}
add_action('init', 'wpscan_disable_xmlrpc');
Этот фильтр запрещает работу XML-RPC, и запросы к xmlrpc.php будут возвращать ошибку.
Блокировка 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 нежелательно, можно ограничить его функциональность. Вот несколько популярных плагинов:
- Disable XML-RPC — простой плагин для полного отключения.
- XML-RPC Control — позволяет блокировать отдельные методы XML-RPC, например,
system.multicall, который часто используют для brute force. - Wordfence Security — комплексный плагин безопасности с возможностью блокировки атак через XML-RPC.
Выбор зависит от уровня вашей безопасности и потребностей сайта.
Как ограничить метод system.multicall в XML-RPC для предотвращения перебора паролей
Метод system.multicall позволяет объединять несколько XML-RPC вызовов в один запрос, что злоумышленники используют для ускоренного перебора логинов и паролей. Отключить именно этот метод можно добавлением фильтра в WordPress:
function wpscan_disable_system_multicall($methods) {
if(isset($methods['system.multicall'])) {
unset($methods['system.multicall']);
}
return $methods;
}
add_filter('xmlrpc_methods', 'wpscan_disable_system_multicall');
Этот код удаляет метод из списка доступных, что значительно снижает риск brute force атак через XML-RPC.
Логирование и мониторинг атак через XML-RPC
Для отслеживания попыток атак можно использовать плагины для логирования, например, WP Activity Log или встроенные возможности Wordfence. Также полезно анализировать логи сервера.
Пример простой функции для логирования запросов к XML-RPC:
function wpscan_log_xmlrpc_requests() {
if (strpos($_SERVER['REQUEST_URI'], 'xmlrpc.php') !== false) {
error_log('XML-RPC запрос с IP: ' . $_SERVER['REMOTE_ADDR']);
}
}
add_action('init', 'wpscan_log_xmlrpc_requests');
Эта функция записывает в лог каждый запрос к XML-RPC с IP-адресом клиента, что поможет выявлять подозрительную активность.
Рекомендации по дополнительной защите WordPress от атак через XML-RPC
- Используйте двухфакторную аутентификацию (2FA) — даже если пароль будет подобран, без второго фактора взлом будет невозможен.
- Ограничьте количество попыток входа — с помощью плагинов, таких как Clearfy Pro, который поддерживает блокировку по IP и дополнительные меры защиты.
- Обновляйте WordPress, темы и плагины — многие уязвимости устраняются в новых версиях.
- Используйте Web Application Firewall (WAF) — например, с помощью плагина Expert Review для мониторинга и блокировки подозрительных запросов.
Выводы
XML-RPC — удобный, но потенциально опасный механизм WordPress. Его правильная настройка и защита помогут предотвратить множество атак и сохранить безопасность сайта. В зависимости от потребностей вы можете полностью отключить XML-RPC, ограничить только опасные методы или использовать комплексные решения для контроля доступа.
Не забывайте также про другие меры безопасности, такие как использование надёжных паролей, обновления и мониторинг активности.