XML-RPC — это протокол, который позволяет удалённо управлять сайтом WordPress, например, публиковать записи через внешние приложения или мобильные клиенты. Несмотря на удобство, XML-RPC часто становится причиной уязвимостей, таких как атаки типа brute force или DDoS. Многие администраторы хотят отключить XML-RPC, чтобы повысить безопасность сайта. В этой статье мы разберём, как сделать это без плагинов, используя только код.
Что такое XML-RPC и зачем его отключать в WordPress
XML-RPC — это интерфейс удалённого вызова процедур, который позволяет взаимодействовать с WordPress через HTTP-запросы. По умолчанию он включён и доступен по адресу https://ваш-сайт.ru/xmlrpc.php. Многие злоумышленники используют этот файл для проведения массовых атак, так как он позволяет попытки входа по паролю через протокол.
Если вы не используете внешние приложения для публикации или управления сайтом (например, мобильное приложение WordPress), то отключение XML-RPC — лучший способ защититься от ряда атак.
Важно отметить, что многие плагины и сервисы используют XML-RPC, поэтому перед отключением убедитесь, что он вам не нужен.
Способы отключения XML-RPC без плагинов
Есть несколько способов отключить XML-RPC без установки дополнительных плагинов. Основные из них — запрет доступа через functions.php вашей темы или через правила в .htaccess. Рассмотрим оба варианта.
Отключение XML-RPC через functions.php (wpskins_disable_xmlrpc)
Самый простой способ — добавить фильтр, который отключит доступ к XML-RPC. В файл functions.php вашей активной темы добавьте следующий код:
function wpskins_disable_xmlrpc( $methods ) {
return []; // Отключаем все методы XML-RPC
}
add_filter( 'xmlrpc_methods', 'wpskins_disable_xmlrpc' );Этот код возвращает пустой массив методов XML-RPC, effectively деактивируя протокол. Сервер будет отвечать, но никаких действий выполнять не будет.
Если вы хотите полностью блокировать доступ к файлу xmlrpc.php, лучше использовать метод с .htaccess.
Блокировка доступа к xmlrpc.php через .htaccess
Для пользователей веб-серверов Apache добавьте в корневой каталог сайта файл .htaccess или отредактируйте существующий, добавив:
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>Это полностью заблокирует доступ к файлу xmlrpc.php.
Для сайтов на Nginx настройка будет выглядеть так, и её нужно внести в конфигурацию сервера:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}Тонкости и исключения при отключении XML-RPC
Если вы хотите отключить XML-RPC, но оставить возможность публикации из мобильного приложения, можно ограничить доступ по IP или по определённым методам.
Пример фильтра для отключения всех методов, кроме wp.getUsersBlogs, который нужен для авторизации в мобильных приложениях:
function wpskins_restrict_xmlrpc_methods( $methods ) {
foreach ( $methods as $method => $callback ) {
if ( 'wp.getUsersBlogs' !== $method ) {
unset( $methods[ $method ] );
}
}
return $methods;
}
add_filter( 'xmlrpc_methods', 'wpskins_restrict_xmlrpc_methods' );Такой код отключит все операции, кроме запроса блогов пользователя.
Защита от атак методом «pingback»
XML-RPC поддерживает метод pingback.ping, который используют злоумышленники для DDoS-атак. Если вы хотите оставить XML-RPC, но отключить именно эту функцию, можно сделать так:
function wpskins_disable_pingback( $methods ) {
if ( isset( $methods['pingback.ping'] ) ) {
unset( $methods['pingback.ping'] );
}
return $methods;
}
add_filter( 'xmlrpc_methods', 'wpskins_disable_pingback' );Проверка отключения XML-RPC
Чтобы проверить, отключён ли XML-RPC, можно сделать HTTP-запрос к https://ваш-сайт.ru/xmlrpc.php. Если отключение выполнено через .htaccess, сервер должен вернуть ошибку 403 Forbidden.
Если отключение сделано через фильтр, будет возвращён заголовок 200 OK, но при попытке выполнить методы XML-RPC вы получите ошибку.
Для проверки можно использовать утилиты типа curl:
curl -I https://ваш-сайт.ru/xmlrpc.phpИли специализированные онлайн-сервисы для тестирования XML-RPC.
Заключение: как выбрать способ отключения XML-RPC
Если вам нужна максимальная безопасность и вы не пользуетесь XML-RPC, лучше всего полностью блокировать файл через .htaccess или конфигурацию сервера Nginx. Это гарантирует отсутствие доступа к протоколу.
Если же вам важна совместимость с внешними приложениями, можно ограничить функционал через фильтры в functions.php, отключив только опасные методы.
Отключение XML-RPC — это простой, но эффективный способ снизить риски взлома WordPress-сайта, особенно на сайтах с минимальной внешней интеграцией.