XML-RPC является одной из функций WordPress, которая позволяет удалённо взаимодействовать с сайтом, например, через мобильные приложения или внешние сервисы. Однако эта функция часто становится причиной уязвимостей и атак, таких как перебор паролей (brute force) и DDoS-атаки. В этой статье мы подробно рассмотрим, как правильно отключить XML-RPC в WordPress для повышения безопасности сайта, а также рассмотрим альтернативные способы сохранения нужного функционала.
Что такое XML-RPC и почему его нужно отключать
XML-RPC — это протокол удалённого вызова процедур, который позволяет приложениям взаимодействовать с WordPress без необходимости заходить в админку. Он включён по умолчанию и доступен по адресу https://ваш-сайт.ru/xmlrpc.php. Через него можно делать постинг, редактирование, удаление записей и другие действия.
Тем не менее, XML-RPC часто становится целью злоумышленников, так как позволяет проводить атаки перебора паролей, обходя стандартные лимиты входа. Кроме того, через этот протокол иногда запускают DDoS-атаки, что приводит к перегрузке сервера.
Если вы не используете мобильные приложения WordPress или внешние сервисы, которые требуют XML-RPC, лучше его отключить полностью.
Способы отключения XML-RPC в WordPress
Отключение через functions.php темы
Самый простой способ — добавить код в файл functions.php вашей активной темы. Этот код полностью блокирует доступ к файлу xmlrpc.php и возвращает ошибку при попытке обращения к нему.
function wpnews_disable_xmlrpc() {
add_filter('xmlrpc_enabled', '__return_false');
}
add_action('init', 'wpnews_disable_xmlrpc');Этот фильтр отключает XML-RPC на уровне WordPress, не позволяя выполнять никакие вызовы через этот протокол.
Отключение через .htaccess (для Apache)
Если у вас есть доступ к файлу .htaccess, можно заблокировать доступ к xmlrpc.php на уровне веб-сервера. Это более эффективный способ, так как запросы даже не доходят до PHP.
<Files xmlrpc.php>
Order allow,deny
Deny from all
</Files>Однако этот способ не подойдёт, если на сервере используется Nginx или другой веб-сервер.
Отключение через Nginx
Для сайтов на Nginx нужно добавить в конфигурацию сервера следующий блок:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}После внесения изменений перезапустите Nginx.
Плагины для управления XML-RPC
Если вы предпочитаете не трогать код и конфигурацию, можно использовать специальные плагины:
- Disable XML-RPC — простой плагин, который отключает XML-RPC полностью;
- Stop XML-RPC Attack — плагин, который не отключает XML-RPC, а ограничивает количество запросов и блокирует подозрительную активность;
- Clearfy Pro — мощный оптимизатор и усилитель безопасности, в котором есть удобный переключатель для отключения XML-RPC, а также множество других функций по безопасности и оптимизации.
Для установки плагина можно воспользоваться репозиторием WordPress или скачать с официального сайта WPSHOP.
Как проверить, отключён ли XML-RPC
Чтобы убедиться, что XML-RPC действительно отключён, попробуйте перейти в браузере по адресу https://ваш-сайт.ru/xmlrpc.php. Если вы видите сообщение XML-RPC server accepts POST requests only. или страницу с ошибкой 403/404, значит всё настроено правильно.
Также можно использовать онлайн-инструменты для проверки доступности XML-RPC, например, https://xmlrpc.eritreo.it/.
Альтернативы XML-RPC: REST API в WordPress
Если вы отключаете XML-RPC, но всё же хотите сохранять возможность удалённого управления сайтом, рассмотрите использование REST API WordPress. Это современный и более безопасный способ взаимодействия с сайтом.
REST API поддерживается по умолчанию с версии WordPress 4.7 и позволяет выполнять практически все операции, которые раньше делались через XML-RPC.
Для примера, чтобы получить список последних постов через REST API, используйте следующий URL:
https://ваш-сайт.ru/wp-json/wp/v2/postsДля более сложных операций потребуется авторизация через OAuth или JWT, но в целом REST API предлагает гибкие возможности для интеграции и автоматизации.
Выводы и рекомендации
Отключение XML-RPC — важный шаг в повышении безопасности WordPress-сайта. Если вы не используете мобильные приложения или внешние интеграции, лучше отключить его полностью с помощью кода, настроек сервера или плагинов.
Для сохранения функционала удалённого управления рекомендуем изучить REST API и внедрять современные методы взаимодействия.