Безопасность сайта

XML-RPC в WordPress: что это, почему его любят боты и когда его можно спокойно отключить

Если у вас сайт на WordPress, вы могли видеть совет в духе: “отключите XML-RPC, и будет вам счастье”. Совет старый. И, кстати, не всегда тупо правильный. Но в целом логика там есть.

XML-RPC — это один из тех кусков WordPress, про который владелец сайта обычно не знает вообще ничего. Пока не начинается брутфорс, странняя нагрузка на сервер или проблемы с безопасностью. Тогда всплывает файл xmlrpc.php, и все резко становятся экспертами. Ну почти.

Давайте по-человечески разберем, что это такое, зачем оно было нужно, почему боты в него так уперлись и когда его реально можно отключить без боли.


Что вообще такое XML-RPC

Если совсем просто, XML-RPC — это старый способ управлять WordPress удаленно. Не через обычную админку в браузере, а через внешние приложения и запросы.

Когда-то это было реально полезно. Например, вы писали посты в отдельной программе на компьютере или публиковали что-то с телефона через старое мобильное приложение. Запрос уходил на xmlrpc.php, WordPress его принимал и делал то, что попросили — вход, публикация записи, загрузка медиа и так далее.

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

На новых сайтах он часто просто не нужен. Вообще.


Почему боты так любят xmlrpc.php

Потому что это удобная дверь. Не единственная, но удобная.

Самая частая история — брутфорс. Боты долбятся не только в /wp-login.php, но и в xmlrpc.php. Причем иногда даже охотнее. Почему? Потому что через XML-RPC можно проверять логины и пароли пачками, в одном заходе. Это старая техника с system.multicall. Серверу от нее тяжело, а атакующему выгодно.

Вот что получается на практике:

  • бот перебирает пароли к админке не через обычную форму входа, а через xmlrpc.php;
  • нагрузка на сайт растет, особенно на слабом хостинге;
  • если пароль слабый — сайт могут тупо увести;
  • если пароль нормальный — сайт все равно могут положить постоянными запросами.

И это не теория. Маленькие сайты ловят такое постоянно — сайт визитка, салон красоты, локальный интернет-магазин, сайт юриста. Никакой “особой ценности” там нет. Просто боты сканируют интернет ковром. Об этом, кстати, хорошо написано в статье Как хакеры вообще находят ваш сайт — спойлер: вы им не интересны лично. Именно так это и работает — без личной ненависти, просто автоматом.

И да, xmlrpc.php еще любят использовать для pingback-атак. Это когда ваш сайт заставляют слать запросы на чужие сайты. То есть ваш WordPress превращают в участника DDoS. Вам это точно не надо.


Как понять, что XML-RPC у вас вообще используется

Вот тут многие спешат и просто рубят с плеча. А потом владелец говорит: “у меня перестало публиковаться из приложения” или “отвалилась интеграция”. Редко, но бывает.

Сначала лучше проверить, нужен ли он вам хоть для чего-то. Обычно вопрос решается за 10-15 минут.

  1. Спросите себя или разработчика — есть ли у сайта внешние приложения, которые публикуют контент или управляют WordPress.
  2. Проверьте, используете ли вы старое мобильное приложение WordPress или какие-то древние сервисы автопостинга.
  3. Посмотрите логи сервера — есть ли обращения к /xmlrpc.php, и что это за обращения.
  4. Если это только массовые POST-запросы с подозрительных IP — почти наверняка это боты, а не ваш рабочий трафик.

У 8 из 10 небольших бизнес-сайтов ответ простой: нет, не используем. Сайт обновляют через браузер, заказы идут через WooCommerce, формы — через обычные плагины. Все. Тогда XML-RPC обычно можно выключать спокойно.


Когда его можно отключить без особых раздумий

Если у вас:

— обычный корпоративный сайт
— блог, который редактируют через админку
— интернет-магазин на WooCommerce без старых внешних интеграций
— сайт, который вообще обновляют раз в месяц

…тогда отключение XML-RPC — нормальный и безопасный шаг.

Честно говоря, для малого бизнеса это почти всегда правильное решение. Чем меньше лишних открытых точек входа, тем лучше. Без фанатизма, но лучше.

Тем более что сейчас есть более удобные способы укрепить сайт в пару кликов. Например, в функции безопасность в один клик как раз обычно и закрывают такие вещи: XML-RPC, лишнюю техинфу, небезопасные мелочи, которые боты любят особенно сильно. Настройка занимает считаные минуты.


А когда отключать не стоит

Вот тут уже надо чуть аккуратнее.

Не отключайте XML-RPC вслепую, если у вас завязано на нем что-то из старого стека:

  • старые мобильные приложения для публикации контента;
  • внешние сервисы, которые постят записи в WordPress;
  • какие-то самописные интеграции, сделанные много лет назад;
  • редкие плагины, которые до сих пор используют XML-RPC вместо REST API.

Таких сайтов мало, но они есть. Особенно если проект старый и его делал кто-то “на коленке” лет 6-8 назад. Там иногда всплывают очень веселые сюрпризы.

Если сомневаетесь — сначала временно ограничьте доступ, а не выключайте навсегда. Или проверьте на тестовой копии сайта. Это час работы, иногда два. Зато без приключений в пятницу вечером.


Что лучше: отключить совсем или просто ограничить

По ситуации.

Если XML-RPC вам не нужен — отключайте совсем. Это самый чистый вариант.

Если нужен, но редко — можно ограничить доступ по IP, закрыть опасные методы, включить защиту входа и мониторинг. Это уже чуть техничнее, но зато компромиссный вариант.

Я бы смотрел так:

— не используете — выключить
— не уверены — проверить логи и тесты
— используете для конкретной интеграции — оставить, но прикрутить защиту

Кстати, если на сайте уже были странные входы, перебор паролей или редиректы, не надо начинать только с XML-RPC. Сначала проверьте, не взломан ли сайт уже сейчас. Потому что иногда люди отключают xmlrpc.php, выдыхают, а бэкдор уже сидит в uploads. И привет. Если есть подозрения, лучше сразу смотреть сценарий сайт взломан — там уже речь не про “профилактику”, а про чистку и восстановление.


Как отключить XML-RPC на WordPress

Способов несколько. Самый простой — через плагин безопасности или через настройки хостинга, если такая фишка у них есть.

Еще можно через код или правила сервера. Но тут без опыта легко накосячить. Особенно если лезть в .htaccess вживую на рабочем магазине.

Нормальные варианты такие:

  • плагин безопасности — 5-10 минут;
  • настройка на сервере — 10-20 минут, если знаете что делаете;
  • через техспециалиста — обычно полчаса, иногда час с проверкой.

По деньгам тоже все без драмы. Если делаете сами через плагин — бесплатно. Если просите специалиста разово — это обычно не какая-то космическая сумма. А вот разгребать последствия взлома потом сильно дороже.

И да, после отключения стоит проверить:

— работает ли вход в админку
— публикуются ли записи как раньше
— не отвалились ли внешние сервисы
— нет ли ошибок в логах


Одного отключения XML-RPC мало

Вот это важный момент. Очень.

Отключить XML-RPC — полезно. Но это не “полная защита WordPress”. Это один маленький кусок. Если у вас пароль admin123, PHP 7.4 без апдейтов, 47 плагинов и половина из них заброшены — ну, сами понимаете.

Минимальный набор для нормального спокойствия такой:

— сильные пароли у всех админов
— двухфакторка
— регулярные апдейты WordPress, тем и плагинов
— бэкапы с проверкой восстановления
— журнал действий и мониторинг входов
— сканирование на уязвимости и малварь

Если хотите собрать это без цирка и бесконечных настроек, посмотрите как собрать план безопасности WordPress без программиста. Там как раз нормальный, земной подход — без паранойи и без “купите 14 сервисов сразу”.

А если сайт рабочий, приносит заявки или продажи, то удобнее просто отдать это на обслуживание WordPress. Для маленького бизнеса это часто дешевле, чем один нормальный аврал после взлома. И нервы целее, что тоже денги, если честно.


Короткий вывод

XML-RPC — это старый механизм удаленного доступа к WordPress. Сам по себе он не “вредный”, но боты его обожают. Через него удобно брутфорсить логины, грузить сервер и искать слабые места.

Если вы им не пользуетесь — отключайте. Спокойно.

Если пользуетесь — не паникуйте, а ограничьте и защитите.

И главное — не думайте, что вся безопасность сайта сводится к одному файлу xmlrpc.php. Не-а. Это просто одна дверь. Иногда лишняя. А вот закрыт ли у вас весь дом — это уже совсем другой разговор.