Безопасность WordPress и файл xmlrpc.php

В этой статье мы разоберемся как обезопасить сайт на WordPress и отключить удаленный доступ, особенно если вы им не пользуетесь.
Для удаленного доступа к WordPress используется файл xmlrpc.php который поддерживает функции включенные в PHP начиная с PHP 4.1.0 для написания серверов и клиентов XML-RPC.
Данный инструмент появился, когда WordPress только зарождался и скорость интернета не позволяла быстро создавать и публиковать записи на сайт. Существовал офлайн-клиент, в котором администратор создавал и редактировал записи, а затем через xmlrpc.php записи публиковались на сайт.
В 2008 году было выпущено приложение WordPress для iPhone и поддержка XML-RPC была включена по умолчанию, без возможности отключить её через панель администратора.

Нужно ли оключать xmlrpc.php ?

Одна из важных причин, из-за которой стоит отключить XML-RPC — это угроза безопасности вашего сайта. Злоумышленники часто используют эту лазейку для взлома пароля от админки вашего сайта, а также для DDoS-атаки.
Также частой причиной нагрузки на CPU (центральный процессор) хостинга являются нежелательные подключение через XML-RPC, из-за чего работа вашего хостинга может быть приостановлена.

Как проверить, включен ли XML-RPC на вашем сайте

Проверить можно с помощью XML-RPC Validator. Для этого:

  1. Перейдите на сайт XML-RPC Validator.
  2. В поле Address введите ваш домен и нажмите Check:XML-RPC Validator
  3. Если вы получили сообщение «Congratulation! Your site passed the first check», то xmlrpc.php на вашем сайте включен.

    Если ответ «Failed to check your site at http://domain.ru because of the following error», то xmlrpc.php отключен.

Как отключить?

Чтобы отключить XML-RPC вручную без установки плагина нужно:

  1. Перейдите в корневую папку вашего сайта на WordPress
  2. Откроыть или создать (если он отсутствует) файл .htaccess и вставьте в конце файла строки:
# Block XML-RPC requests
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
  1. Сохранить изменения.

После отключения XML-RPC доступ через xmlrpc.php будет закрыт. Тем самым вы дополнительно обезопасите свой сайт и сможете избежать блокировки услуги хостинга из-за нагрузки на CPU.

Как удалить код связанный с xmlrpc.php ?

Как правило при подключении шаблона «шапки» сайта вызывается хук wp_head(), который выводит различные теги, в том числе и теги для подключения XML-RPC:

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://ваш.домен/xmlrpc.php?rsd">
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://ваш.домен/wp-includes/wlwmanifest.xml">

Для их отключения нужно прописать в файле functions.php следующиц код:

function removeHeadLinks() {
  remove_action('wp_head', 'rsd_link');
  remove_action('wp_head', 'wlwmanifest_link');
}
add_action('init', 'removeHeadLinks');

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

Частичное отключение XML-RPC

Если вам все же нужен XML-RPC, то можно ограничить удаленный доступ определенными адресами. Пропишите этот код в файл .htaccess и впишите свои адреса, по которым будет доступен этот функционал:

# Block XML-RPC requests
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from 192.168.1.1
Allow from 10.0.0.0/100
</Files>