Полное руководство по xmlrpc.php в WordPress (что это такое, риски безопасности, как его отключить)

Опубликовано: 2020-07-06

Спецификация XML-RPC WordPress была разработана для стандартизации связи между различными системами, а это означает, что приложения вне WordPress (например, другие платформы для ведения блогов и настольные клиенты) могут взаимодействовать с WordPress.

Эта спецификация была частью WordPress с момента его создания и выполняла очень полезную работу. Без него WordPress был бы изолирован от остального Интернета.

Однако у xmlrpc.php есть свои недостатки. Он может создавать уязвимости на вашем сайте WordPress, и теперь его заменил WordPress REST API, который намного лучше открывает WordPress для других приложений.

В этом посте мы объясним, что такое xmlrpc.php, почему его следует отключить, и поможем определить, работает ли он на вашем сайте WordPress.

Готовый? Давайте погрузимся!

Что такое xmlrpc.php?

XML-RPC — это спецификация, которая обеспечивает связь между WordPress и другими системами. Это было сделано путем стандартизации этих коммуникаций с использованием HTTP в качестве транспортного механизма и XML в качестве механизма кодирования.

XML-RPC предшествовал WordPress: он присутствовал в программном обеспечении для ведения блогов b2, которое было создано для создания WordPress еще в 2003 году. Код системы хранится в файле с именем xmlrpc.php в корневом каталоге сайта. И он все еще там, даже несмотря на то, что XML-RPC в значительной степени устарел.

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

Если вы использовали мобильное приложение WordPress до версии 3.5, вы, возможно, помните, что вам нужно было включить XML-RPC на своем сайте, чтобы приложение могло публиковать контент. Это произошло потому, что в приложении не работал сам WordPress; вместо этого это было отдельное приложение, связывающееся с вашим сайтом WordPress с помощью xmlrpc.php.

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

Но поскольку REST API был интегрирован в ядро ​​WordPress, файл xmlrpc.php больше не используется для этого взаимодействия. Вместо этого REST API используется для связи с мобильным приложением WordPress, с настольными клиентами, с другими платформами для ведения блогов, с WordPress.com (для плагина Jetpack) и с другими системами и службами. Диапазон систем, с которыми может взаимодействовать REST API, намного больше, чем разрешенный xmlrpc.php. Кроме того, здесь гораздо больше гибкости.

Поскольку REST API заменил XML-RPC, теперь вам следует отключить xmlrpc.php на своем сайте. Давайте посмотрим, почему.

Почему вы должны отключить xmlrpc.php

Основная причина, по которой вам следует отключить xmlrpc.php на вашем сайте WordPress, заключается в том, что он создает уязвимости в системе безопасности и может стать целью атак.

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

Если xmlrpc.php является угрозой безопасности и больше не выполняет свою работу, то почему его не удалили из WordPress?

Причина этого в том, что одной из ключевых особенностей WordPress всегда будет обратная совместимость. Если вы хорошо управляете своим сайтом, вы знаете, что важно поддерживать WordPress в актуальном состоянии, а также любые плагины или темы.

Но всегда найдутся владельцы веб-сайтов, которые не захотят или не смогут обновить свою версию WordPress. Если они используют версию, предшествующую REST API, им все равно потребуется доступ к xmlrpc.php.

Рассмотрим более подробно конкретные уязвимости.

DDoS-атаки через XML-RPC Pingbacks

Одной из функций, которую включил xmlrpc.php, были пингбэки и трекбэки. Это уведомления, которые появляются в комментариях на вашем сайте, когда другой блог или сайт ссылается на ваш контент.

Спецификация XML-RPC сделала это взаимодействие возможным, но его заменил REST API (как мы уже видели).

Если на вашем сайте включен XML-RPC, хакер потенциально может организовать DDoS-атаку на ваш сайт, используя xmlrpc.php для отправки на ваш сайт большого количества пингбэков за короткое время. Это может перегрузить ваш сервер и вывести ваш сайт из строя.

Атаки полным перебором через XML-RPC

Каждый раз, когда xmlrpc.php делает запрос, он отправляет имя пользователя и пароль для аутентификации. Это создает значительную угрозу безопасности и является тем, чего не делает REST API. На самом деле REST API использует OAuth, который отправляет токены для аутентификации вместо имен пользователей или паролей.

Поскольку xmlrpc.php отправляет информацию для аутентификации с каждым запросом, хакеры могут использовать ее, чтобы попытаться получить доступ к вашему сайту. Атака грубой силы, подобная этой, может позволить им вставить контент, удалить код или повредить вашу базу данных.

Если злоумышленник отправляет на ваш сайт достаточно запросов, каждый из которых использует разные пары имени пользователя и пароля, есть вероятность, что он в конечном итоге найдет правильный запрос, предоставив ему доступ к вашему сайту.

Вот почему, если вы используете последнюю версию WordPress, которая использует REST API для связи с внешними системами, вам следует отключить xmlrpc.php . Это не нужно, и это может сделать ваш сайт уязвимым.


Работает ли xmlrpc.php на вашем сайте WordPress?

Первое, что вам нужно сделать, это определить, работает ли xmlrpc.php на вашем сайте WordPress.

Это не простой случай проверки наличия файла: он является частью каждой установки WordPress и будет присутствовать, даже если XML-RPC отключен.

Чтобы проверить, включен ли xmlrpc.php на вашем сайте, используйте службу проверки WordPress XML-RPC. Это проверит ваш сайт и сообщит вам, включен ли xmlrpc.php.

Служба проверки WordPress XML-RPC
Служба проверки WordPress XML-RPC

Вот результат, который я получил, когда проверил этот сайт на сервисе.

Проверка Kinsta XML-RPC
Проверка Kinsta XML-RPC

Это показывает, что xmlrpc.php отключен на kinsta.com. Итак, если вы запустите проверку и обнаружите, что xmlrpc.php все еще включен на вашем сайте, как вы его отключите?

Как отключить xmlrpc.php

Есть три способа отключить xmlrpc.php:

Давайте посмотрим на каждого в отдельности.

Как отключить xmlrpc.php с помощью плагина

Установка плагина для отключения xmlrpc.php — самый простой способ сделать это. Плагин Disable XML-RPC полностью отключит его. Вот как вы его используете.

Моя отправная точка — мой собственный веб-сайт, на котором включен xmlrpc.php. Вы можете увидеть это через проверку, которую я сделал:

Веб-сайт Рэйчел МакКоллин — проверка XML-RPC
Веб-сайт Рэйчел МакКоллин — проверка XML-RPC

Установите плагин через экран « Плагины » в панели администратора WordPress и активируйте его.

Больше ничего делать не нужно: активация плагина приведет к отключению XML-RPC. Теперь, если я запущу проверку на своем сайте, я получу другой результат:

Веб-сайт Рэйчел Макколлин — вторая проверка XML-RPC
Веб-сайт Рэйчел МакКоллин — вторая проверка XML-RPC

Это так просто!

Отключить пингбеки XML-RPC с помощью плагина

Но что, если вы хотите отключить некоторые аспекты xmlrpc.php, но не другие? Плагин Disable XML-RPC Pingback позволяет отключить только функцию проверки связи, что означает, что вы по-прежнему имеете доступ к другим функциям XML-RPC, если они вам нужны.

Плагин работает так же, как и плагин Disable XML-RPC: просто установите, активируйте его, и он заработает.

Настройка активации XML-RPC и REST API с помощью подключаемого модуля

Если вам нужен более детальный контроль над настройкой xmlrpc.php и REST API на вашем сайте, вы можете установить подключаемый модуль REST XML-RPC Data Checker.

После того, как вы установили и активировали этот подключаемый модуль, перейдите в « Настройки» > «Проверка данных REST XML-RPC » и щелкните вкладку « XML-RPC ».

Средство проверки данных REST XML-RPC
Средство проверки данных REST XML-RPC

Это позволяет точно указать, какие аспекты xmlrpc.php активны на вашем сайте.

Нужен невероятно быстрый, безопасный и удобный для разработчиков хостинг? Kinsta создан для разработчиков WordPress и предоставляет множество инструментов и мощную панель инструментов. Ознакомьтесь с нашими планами

Кроме того, вы можете просто отключить его вообще. И если вы также хотите контролировать REST API, плагин предоставляет вам еще одну вкладку для этого.

Как отключить xmlrpc.php без плагина

Если вы не хотите устанавливать другой плагин на свой сайт, вы можете отключить xmlrpc.php, добавив код в фильтр или в файл .htaccess. Давайте рассмотрим оба метода.

Отключить xmlrpc.php через фильтр

Здесь можно использовать фильтр xmlrpc_enabled для отключения xmlrpc.php. Добавьте эту функцию в плагин и активируйте ее на своем сайте:

 add_filter( 'xmlrpc_enabled', '__return_false' );

Вы можете добавить это в файл функций вашей темы, но лучше написать плагин.

Другой вариант связан с редактированием вашего файла .htaccess, который доступен у хостинг-провайдеров, использующих Apache, путем подключения к серверу вашего сайта через FTP или cPanel.

Отключить xmlrpc.php через файл .htacess

В вашем файле .htaccess добавьте этот код:

 <Files xmlrpc.php> Order Allow,Deny Deny from all </Files>

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

Попросите вашего хостинг-провайдера отключить xmlrpc.php

Кроме того, некоторые хостинг-провайдеры отключают xmlrpc.php при обнаружении атаки.

В Kinsta при обнаружении атаки через XML-RPC в файл Nginx.config автоматически добавляется фрагмент кода:

 location ~* ^/xmlrpc.php$ { return 403; }

Это вызовет ошибку 403 и остановит атаку.

Если вы делаете это самостоятельно, лучше всего использовать один из способов, описанных выше. Но прежде чем вы это сделаете, всегда сначала уточните у своего хостинг-провайдера.

Когда вам нужно включить xmlrpc.php?

В некоторых случаях вам действительно нужно включить xmlrpc.php на вашем сайте WordPress или когда вам не следует полностью отключать его.

Эти:

  • Вы не используете REST API (не рекомендуется, но необходимо в некоторых ситуациях), но вам необходимо обмениваться данными между вашим сайтом WordPress и другими системами.
  • Вы не можете обновить WordPress до версии 4.4 или выше, поэтому у вас нет доступа к REST API. Это может быть связано с ограничениями в настройках вашего хостинга (в этом случае я бы сменил хостинг-провайдера) или несовместимостью темы или плагинов (в этом случае я бы заменил или обновил их).
  • Вы работаете с внешним приложением, которое не может получить доступ к WP REST API, но может получить доступ к XML-RPC (в долгосрочной перспективе я бы посоветовал обновить это приложение или переключиться на приложение, совместимое с REST).

Вот и все! Ни одна из этих причин не является особенно хорошей причиной для сохранения включенной спецификации XML-RPC.

Единственная причина, по которой он все еще находится в WordPress, — это обратная совместимость, и вы будете использовать его, только если работаете с устаревшими системами. Для тех, кто хочет поддерживать свои сайты в актуальном состоянии и работать с новейшими технологиями, отключение xmlrpc.php — это то, что нужно.

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

Резюме

Спецификация XML-RPC была разработана еще до того, как был создан WordPress, как средство взаимодействия WordPress с внешними системами и приложениями. Он имеет врожденные недостатки безопасности и может сделать ваш сайт уязвимым для атак.

Теперь, когда REST API позволяет вашему сайту взаимодействовать с другими приложениями, вы можете безопасно отключить xmlrpc.php. Если вы выполните описанные выше шаги, отключив его, вы улучшите безопасность своего сайта.