XML-RPC — это протокол, встроенный в WordPress, который позволяет удалённо взаимодействовать с сайтом, например, для публикации записей через мобильные приложения или сторонние сервисы. Однако XML-RPC часто становится причиной уязвимостей и атак, в том числе brute force и DDoS. В этой статье подробно разберём, как правильно отключить XML-RPC на WordPress с помощью кода и популярных плагинов, а также рассмотрим альтернативные решения.
Зачем отключать XML-RPC: риски и уязвимости
XML-RPC предоставляет мощный функционал, но одновременно открывает дополнительные пути для атак. Основные риски:
- Brute force атаки: с помощью метода
system.multicallзлоумышленники могут выполнять тысячи попыток входа за один запрос. - DDoS-атаки: XML-RPC можно использовать для отправки большого количества запросов, перегружающих сервер.
- Утечка информации: через XML-RPC можно получить определённые данные о сайте и его пользователях.
Если вы не используете внешние приложения, которые требуют XML-RPC, отключение этого протокола — простой и эффективный способ повысить безопасность сайта.
Как отключить XML-RPC в WordPress с помощью кода
Для отключения XML-RPC можно использовать несколько подходов на уровне PHP. Вот наиболее популярные и безопасные методы.
Метод 1: Отключение XML-RPC через фильтр
WordPress предоставляет фильтр xmlrpc_enabled, который можно использовать для отключения XML-RPC:
add_filter('xmlrpc_enabled', '__return_false');
Добавьте этот код в файл functions.php вашей темы или в собственный плагин. Этот способ прост и не требует отключения всего файла xmlrpc.php.
Метод 2: Блокировка доступа к xmlrpc.php через functions.php
Другой способ — полностью блокировать доступ к файлу xmlrpc.php с помощью хука init:
function wpscan_disable_xmlrpc() {
if (strpos($_SERVER['REQUEST_URI'], 'xmlrpc.php') !== false) {
wp_die('XML-RPC отключён на этом сайте.', 'Доступ запрещён', array('response' => 403));
}
}
add_action('init', 'wpscan_disable_xmlrpc');
Этот код прерывает выполнение при попытке доступа к xmlrpc.php, возвращая ошибку 403.
Метод 3: Отключение отдельных методов XML-RPC
Если полностью отключать XML-RPC не хотите, можно ограничить опасные методы, например, system.multicall:
function wpscan_filter_xmlrpc_methods($methods) {
if (isset($methods['system.multicall'])) {
unset($methods['system.multicall']);
}
return $methods;
}
add_filter('xmlrpc_methods', 'wpscan_filter_xmlrpc_methods');
Это снижает риск массовых попыток входа, сохраняя при этом часть функционала.
Отключение XML-RPC с помощью плагинов
Если вы предпочитаете готовые решения, можно использовать специализированные плагины. Вот несколько популярных и надёжных вариантов.
Плагин Disable XML-RPC
Очень простой плагин, который полностью отключает XML-RPC одним кликом. Подходит для всех, кто не использует удалённые сервисы и хочет быстро устранить уязвимость.
Плагин Clearfy Pro
Clearfy Pro — это комплексный плагин для оптимизации и безопасности WordPress. В числе многих функций он позволяет легко отключить XML-RPC, а также блокировать нежелательные методы и IP-адреса.
Использование Clearfy Pro удобно, если вы хотите получить не только защиту XML-RPC, но и ряд других улучшений.
WPGPT — автоматизация безопасности
Плагин WPGPT использует ИИ для анализа и устранения уязвимостей, включая рекомендации по отключению XML-RPC, если он не нужен. Интерактивный помощник поможет сделать сайт безопаснее без глубоких технических знаний.
Как проверить, что XML-RPC действительно отключён
После применения любого из методов важно проверить, что XML-RPC больше не доступен:
- Попробуйте открыть
https://ваш-сайт.ru/xmlrpc.phpв браузере — если увидите сообщение с ошибкой или отказом в доступе, значит отключение сработало. - Используйте онлайн-инструменты для проверки XML-RPC, например, xmlrpc.eritreo.it.
- Проверьте логи сервера на предмет новых запросов к
xmlrpc.php. Их должно не быть или они должны блокироваться.
Альтернативные меры безопасности для XML-RPC
Если полностью отключать XML-RPC нельзя (например, используете мобильные приложения или Jetpack), рекомендуем применять дополнительные меры:
Ограничение доступа по IP
Через конфигурацию сервера (htaccess, nginx) можно разрешить доступ к xmlrpc.php только с доверенных IP-адресов.
Ограничение количества запросов (rate limiting)
Используйте плагины безопасности или серверные правила, чтобы ограничить количество запросов к XML-RPC за определённый промежуток времени, предотвращая атаки.
Внедрение CAPTCHA для запросов XML-RPC
Хотя реализовать CAPTCHA для XML-RPC сложно, некоторые плагины безопасности предлагают похожие механизмы, блокирующие подозрительную активность.
Пример комплексного кода для отключения и логирования попыток доступа к XML-RPC
function wpscan_block_xmlrpc_and_log() {
if (strpos($_SERVER['REQUEST_URI'], 'xmlrpc.php') !== false) {
error_log('Попытка доступа к XML-RPC: IP ' . $_SERVER['REMOTE_ADDR'] . ', время: ' . current_time('mysql'));
wp_die('XML-RPC отключён на этом сайте.', 'Доступ запрещён', array('response' => 403));
}
}
add_action('init', 'wpscan_block_xmlrpc_and_log');
add_filter('xmlrpc_enabled', '__return_false');
Этот код не только блокирует доступ, но и записывает в лог попытки обращения, что помогает отслеживать возможные атаки.
Используя описанные методы и плагины, вы сможете эффективно защитить свой WordPress-сайт от угроз, связанных с XML-RPC, повысить безопасность и стабильность работы. Помните, что безопасность — это комплекс мер, и отключение XML-RPC — важный, но не единственный шаг.