Отключение XML-RPC WordPress навсегда: полное руководство и защита от DDoS
Почему стоит отключить XML-RPC?
XML-RPC – старый API WordPress, который позволяет выполнять удалённые запросы. Несмотря на полезность для мобильных приложений, большинство сайтов им не пользуются, а злоумышленники используют его для брутфорса и DDoS‑атак. Отключив XML-RPC полностью, вы уберёте одну из потенциальных точек входа.
Способы отключения XML-RPC навсегда
Рассмотрим четыре надёжных метода: через .htaccess, functions.php, плагины и конфигурацию Nginx. Каждый из них работает независимо, но их комбинация обеспечивает максимальную защиту.
1. Блокировка запросов в .htaccess
Для серверов Apache достаточно добавить правило, которое будет отвечать кодом 403 Forbidden на любые обращения к xmlrpc.php. Это самый быстрый способ, не требующий изменения кода темы.
# Отключаем XML-RPC
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/xmlrpc.php$ [NC]
RewriteRule ^.*$ - [R=403,L]
</IfModule> После сохранения .htaccess перезагрузите страницу /xmlrpc.php – получите ошибку 403.
2. Отключение через functions.php
Если ваш сайт работает на Nginx или вы хотите иметь решение на уровне PHP, добавьте следующий код в файл functions.php активной темы:
/**
* Полное отключение XML-RPC
*/
add_filter( 'xmlrpc_enabled', '__return_false' );
// Отключаем методы pingback, которые тоже используют XML-RPC
remove_action( 'wp_head', 'pingback_link' );
add_filter( 'bloginfo_url', function( $output, $show ) {
return ( $show === 'pingback_url' ) ? '' : $output;
}, 10, 2 ); Этот фильтр останавливает инициализацию XML-RPC, а дополнительные строки убирают ссылки pingback из <head>.
3. Плагин‑решение
Если вы предпочитаете управлять безопасностью через плагины, выбирайте проверенные решения. Например, Wordfence имеет встроенную опцию «Disable XML-RPC», которая блокирует запросы без изменения кода.
- Установите и активируйте плагин.
- Перейдите в «Firewall → Settings».
- В разделе «Advanced Firewall Options» включите «Disable XML-RPC».
- Сохраните настройки – плагин автоматически добавит правила в ваш
.htaccessи/или в Nginx‑конфиг.
Плагин‑подход удобен, если вы не хотите править файлы вручную и хотите получать уведомления о попытках доступа.
4. Отключение на уровне Nginx
Для серверов Nginx необходимо добавить правило в конфигурацию сайта (обычно /etc/nginx/sites‑available/your‑site).
# Отключаем XML-RPC в Nginx
location = /xmlrpc.php {
deny all; # полностью блокируем доступ
return 403; # отправляем статус 403
}
После правки перезапустите Nginx: sudo systemctl reload nginx. Теперь любые запросы к xmlrpc.php будут отклоняться.
Защита от DDoS‑атак, использующих XML‑RPC
Отключив XML-RPC, вы уже снизили риск «pingback‑amplification» DDoS. Тем не менее, рекомендуется добавить дополнительные меры:
- Ограничьте количество запросов к
admin‑ajax.phpиxmlrpc.phpс помощью правил Rate‑Limit в .htaccess или Nginx. - Включите двухфакторную аутентификацию (2FA) для всех администраторов.
- Регулярно проверяйте логи сервера на наличие повторяющихся запросов к
xmlrpc.php. - Используйте WAF‑решения, такие как Sucuri, которые автоматически блокируют подозрительные IP.
Проверка, что XML‑RPC действительно отключён
После применения любого из методов выполните проверку:
- Откройте в браузере
https://example.com/xmlrpc.php. Должно отобразиться сообщение «403 Forbidden» или пустой ответ. - Запустите
curl -I https://example.com/xmlrpc.php. Статус‑код должен быть 403. - В админ‑панели WordPress перейдите в «Инструменты → Сайт Health». В разделе «Технические детали» убедитесь, что
XML-RPCотмечен как «Disabled».
Если хотя бы один из пунктов показывает, что XML-RPC активен, проверьте конфликтующие правила в .htaccess или Nginx.
Комбинирование методов – лучший результат
Для максимальной надёжности рекомендуется использовать два уровня защиты одновременно: серверный ( .htaccess / Nginx ) + уровень WordPress (functions.php или плагин). Такой подход гарантирует, что даже при ошибке одного из слоёв запросы всё равно будут блокированы.
Пример комбинированного решения для Apache:
# .htaccess – блокировка на уровне сервера
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/xmlrpc.php$ [NC]
RewriteRule ^.*$ - [R=403,L]
</IfModule>
# functions.php – двойная защита внутри WordPress
add_filter( 'xmlrpc_enabled', '__return_false' );
remove_action( 'wp_head', 'pingback_link' );
Таким образом, даже если злоумышленник обойдёт .htaccess (например, через прокси), PHP‑фильтр всё равно отключит обработку XML‑RPC.
Что делать, если вам всё же нужен XML‑RPC?
Иногда сторонние сервисы (например, Jetpack или мобильные приложения) требуют XML‑RPC. В таком случае:
- Ограничьте доступ по IP: в .htaccess добавьте
Allow from 123.45.67.89только для доверенных адресов. - Включите аутентификацию по паролю через HTTP‑Auth.
- Используйте плагин GitHub + WordPress для контроля версий и быстрой откатки при обнаружении уязвимости.
Но если вы не используете такие сервисы, лучше оставить XML‑RPC полностью отключённым.
Итоги
Отключение XML‑RPC – простая, но эффективная мера против DDoS и брутфорс‑атак. Выберите один из четырёх способов (или их комбинацию), проверьте результат и не забывайте о дополнительном hardening через WAF и Rate‑Limit. Ваш WordPress‑сайт будет безопаснее, а ресурсы сервера – свободнее.
❓ Часто задаваемые вопросы
Как проверить, что XML-RPC полностью отключён?
Откройте https://example.com/xmlrpc.php в браузере – должно быть 403 Forbidden, либо выполните curl -I. В WordPress Health проверяется статус «XML-RPC Disabled».
Влияет ли отключение XML-RPC на работу плагинов, таких как Jetpack?
Да, Jetpack и некоторые мобильные приложения используют XML-RPC. Если они нужны, оставьте доступ только для доверенных IP или используйте альтернативные API.
Можно ли отключить XML-RPC только для определённых ролей пользователей?
Стандартные методы отключают сервис глобально. Для гранулированного контроля потребуется писать кастомный обработчик запросов, но это усложняет поддержку.
Нужен ли дополнительный плагин, если я уже блокирую XML-RPC в .htaccess?
Дополнительный плагин не обязателен, но он может добавить логирование попыток доступа и автоматическое обновление правил, что упрощает администрирование.