Что такое xmlrpc.php и как отключить XML-RPC в WordPress?
Автор: Eureka Studio · Обновлено
Коротко
XML-RPC позволяет приложениям входить через xmlrpc.php — отдельную дверь, которую скрытие wp-login.php не закрывает. Отключить его безопасно, если вы не пользуетесь Jetpack или мобильным приложением WordPress. Заблокируйте файл в .htaccess, добавьте фильтр xmlrpc_enabled или используйте плагин, который закрывает вход через XML-RPC, сохраняя пингбэки. Затем проверьте результат.
Шаги
1Шаг 1
Проверьте, отвечает ли xmlrpc.php
Откройте yoursite.com/xmlrpc.php. Если вы видите «XML-RPC server accepts POST requests only.», дверь открыта.
2Шаг 2
Поймите, почему это важно
«Сканирование поверхности» Hushfort проверяет это по-настоящему. На открытом сайте оно сообщает, что пароли можно подбирать в обход скрытого пути входа, а system.multicall позволяет уместить в один запрос сотни попыток.

3Шаг 3
Выберите, насколько закрыть
Откройте Hushfort → «Укрепление поверхности» и включите «Включить укрепление поверхности». Для XML-RPC по умолчанию выбрано «Отключить вход, оставить пингбэки (рекомендуется)» — это подходит большинству сайтов. «Отключить полностью» — самый строгий вариант, но он отключает Jetpack и официальное мобильное приложение. Нажмите «Сохранить изменения».

4Шаг 4
Проверьте, что вход через XML-RPC отклоняется
Вернитесь в «Обзор» и нажмите «Сканировать снова». В строке XML-RPC теперь должно быть: «Вход отключён — попытки ввода пароля отклоняются, пингбэки работают.»

Почему это важно
Отключить XML-RPC в WordPress безопасно, если вы не пользуетесь Jetpack или мобильным приложением WordPress: заблокируйте xmlrpc.php в .htaccess, добавьте фильтр xmlrpc_enabled или закройте вход через XML-RPC плагином, сохранив пингбэки. Это нужно сделать отдельно, потому что скрытие wp-login.php эту дверь не закрывает.
XML-RPC — старый интерфейс удалённого управления WordPress. До появления REST API через него
публиковали записи настольные редакторы и мобильные приложения. Он по-прежнему есть на каждом
сайте WordPress по адресу /xmlrpc.php и по-прежнему принимает имя пользователя и пароль с
каждым запросом.
Это делает его второй дверью для входа. Скрытие wp-login.php его не затрагивает. Код
ограничения входа, который следит только за формой входа, его не видит. А с system.multicall
один HTTP-запрос может нести сотни вариантов пароля. Лимит, считающий запросы, видит одну
попытку там, где их было пятьсот.
Это не теория. Мы создали этот уровень защиты после того, как в один магазин продолжали поступать попытки подбора пароля через XML-RPC, хотя страница входа уже была скрыта.
Пользуетесь ли вы XML-RPC? Скорее всего, нет, если к вам не относится ничего из этого:
- Сайт подключён к Jetpack.
- Вы публикуете или модерируете из официального мобильного приложения WordPress.
- Вы пользуетесь старой настольной программой для блогов или сервисом, который просит ваше имя пользователя и пароль WordPress (а не пароль приложения), чтобы публиковать от вашего имени.
- Вам важны пингбэки с других блогов.
Если не уверены, закройте только вход и оставьте пингбэки. Это убирает риск подбора паролей и сохраняет безобидные функции. Ужесточить можно и позже.
Частые ошибки
- Скрыть вход и на этом остановиться. Подбор паролей просто переезжает на
xmlrpc.php. - Заблокировать весь файл без проверки. Jetpack и официальное мобильное приложение WordPress подключаются через XML-RPC. Если вы ими пользуетесь, закройте только методы входа или тщательно всё проверьте.
- Доверять переключателю без проверки. Некоторые способы оставляют часть XML-RPC отвечающей. Всегда проверяйте результат реальным запросом (см. шаг 4 или проверьте, что открывает ваш сайт).
- Забыть о слое кэша. Если правило CDN уже блокирует
xmlrpc.php, настройка на уровне WordPress не даст видимого эффекта. Это нормально — просто знайте, какой слой делает работу.
Без плагина
Вариант 1: фильтр xmlrpc_enabled. Добавьте это в небольшой must-use плагин
(wp-content/mu-plugins/no-xmlrpc-login.php) или в functions.php дочерней темы:
<?php
add_filter( 'xmlrpc_enabled', '__return_false' );
Так отключаются методы XML-RPC, которым нужен вход. Пингбэки продолжают работать, потому что
вход им не нужен. Сам по себе фильтр не убирает system.multicall, и файл по-прежнему отвечает
на запросы. Чтобы убрать и метод multicall:
<?php
add_filter( 'xmlrpc_methods', function ( $methods ) {
unset( $methods['system.multicall'] );
return $methods;
} );
Вариант 2: заблокировать файл на сервере. В Apache, в .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>
В Nginx: location = /xmlrpc.php { deny all; }. Это самый строгий вариант, и серверу он ничего не
стоит, но он отключает и пингбэки, и Jetpack, и мобильное приложение, а кроме того, живёт вне
WordPress, так что о нём легко забыть при переезде на другой хостинг.
Если что-то пошло не так
- Jetpack показывает ошибку подключения. Jetpack нужен XML-RPC. Переключитесь с «Отключить полностью» на «Отключить вход, оставить пингбэки» или удалите правило на сервере.
- Мобильное приложение WordPress не может войти. Причина та же. Либо пользуйтесь браузером на телефоне, либо разрешите вход через XML-RPC и полагайтесь на лимиты входа и двухфакторную аутентификацию.
- Инструмент публикации перестал публиковать. Проверьте, использует ли он XML-RPC. Большинство современных инструментов перешли на REST API с паролями приложений.
С Hushfort
«Замок чёрного хода» входит в Hushfort Pro — платное дополнение к Hushfort Security, бесплатному плагину безопасности для WordPress. «Сканирование поверхности», которое показывает, открыт ли XML-RPC, есть в бесплатном плагине.
«Замок чёрного хода» входит в уровень «Укрепление поверхности» Hushfort. Он даёт четыре варианта:
- Отключить вход, оставить пингбэки (рекомендуется): подбор паролей через XML-RPC становится невозможным, а пингбэки и трекбэки продолжают работать. Хороший выбор для магазинов.
- Отключить полностью: самый строгий вариант. Jetpack и официальное мобильное приложение не смогут подключиться.
- Отключить только system.multicall: закрывает массовый подбор, остальное не трогает.
- Не изменять: поведение WordPress по умолчанию.
Затем «Сканирование поверхности» проверяет результат реальными запросами, так что вы видите то же,
что и посторонний. А «Защита от нагрузки» оценивает запросы к xmlrpc.php дороже обычного
просмотра страницы, что замедляет оставшийся шум.
Частые вопросы
Безопасно ли отключать XML-RPC в WordPress?
Скрывает ли скрытие страницы входа и xmlrpc.php?
Что такое system.multicall?
Сломает ли отключение XML-RPC пингбэки?
Отключает ли фильтр xmlrpc_enabled XML-RPC полностью?
Похожие инструкции
Как проверить, что мой сайт на WordPress открывает посторонним?
Проверка безопасности сайта на WordPress глазами бота: пять запросов покажут, открыты ли вход, XML-RPC и имена пользователей, и как закрыть найденное.
Смотреть шагиКак ограничить попытки входа в WordPress и защититься от брутфорса?
Защита WordPress от брутфорса: блокировка IP после нескольких неудачных попыток входа. Рабочие настройки, код без плагина и лазейки, которые надо закрыть.
Смотреть шагиКак изменить адрес входа в админку WordPress (wp-admin и wp-login.php)?
Как изменить адрес входа в админку WordPress и скрыть wp-admin за пять безопасных шагов: проверка нового адреса до выхода и способ вернуться, если забыли.
Смотреть шаги
