Hushfort

Что такое xmlrpc.php и как отключить XML-RPC в WordPress?

Автор: Eureka Studio · Обновлено

Коротко

XML-RPC позволяет приложениям входить через xmlrpc.php — отдельную дверь, которую скрытие wp-login.php не закрывает. Отключить его безопасно, если вы не пользуетесь Jetpack или мобильным приложением WordPress. Заблокируйте файл в .htaccess, добавьте фильтр xmlrpc_enabled или используйте плагин, который закрывает вход через XML-RPC, сохраняя пингбэки. Затем проверьте результат.

Шаги

  1. 1Шаг 1

    Проверьте, отвечает ли xmlrpc.php

    Откройте yoursite.com/xmlrpc.php. Если вы видите «XML-RPC server accepts POST requests only.», дверь открыта.

    yoursite.com/xmlrpc.php отвечает: XML-RPC server accepts POST requests only
  2. 2Шаг 2

    Поймите, почему это важно

    «Сканирование поверхности» Hushfort проверяет это по-настоящему. На открытом сайте оно сообщает, что пароли можно подбирать в обход скрытого пути входа, а system.multicall позволяет уместить в один запрос сотни попыток.

    «Сканирование поверхности» в разделе «Обзор» Hushfort: XML-RPC открыт, system.multicall тоже открыт, а список пользователей REST и перебор авторов раскрывают имя пользователя demo-admin
  3. 3Шаг 3

    Выберите, насколько закрыть

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

    «Укрепление поверхности» включено, для XML-RPC выбрано «Отключить вход, оставить пингбэки (рекомендуется)»
  4. 4Шаг 4

    Проверьте, что вход через XML-RPC отклоняется

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

    «Сканирование поверхности» после исправления: XML-RPC, список пользователей REST, перебор авторов и список авторов в карте сайта закрыты

Почему это важно

Отключить 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?

Для большинства сайтов — да. Современный WordPress использует REST API для блочного редактора и большинства интеграций. XML-RPC всё ещё нужен Jetpack, официальному мобильному приложению WordPress и некоторым старым инструментам публикации, так что сначала проверьте их.

Скрывает ли скрытие страницы входа и xmlrpc.php?

Нет. xmlrpc.php сам принимает имена пользователей и пароли, поэтому злоумышленники могут продолжать подбор там и после того, как вы скроете wp-login.php.

Что такое system.multicall?

Метод XML-RPC, который выполняет множество вызовов в одном запросе. Злоумышленники используют его, чтобы отправить сотни вариантов пароля одним запросом и проскочить мимо лимитов, которые считают запросы.

Сломает ли отключение XML-RPC пингбэки?

Блокировка всего файла — сломает. Если закрыть только вход через XML-RPC, а метод pingback оставить открытым, пингбэки и трекбэки продолжат работать.

Отключает ли фильтр xmlrpc_enabled XML-RPC полностью?

Нет. Он отключает только методы, которым нужен вход. Файл по-прежнему отвечает, а вызовы pingback выполняются. Часто именно это и нужно, но проверьте результат.

Сообщить об ошибке или предложить функцию

Ваше сообщение попадёт прямо к команде, которая разрабатывает Hushfort.

О чём сообщение?

Используется только для ответа вам.

Мы используем эти данные только для ответа вам. Конфиденциальность