Почему нужно ограничивать доступ к XML-RPC
XML-RPC — это протокол, который позволяет удалённо взаимодействовать с сайтом WordPress, например, через мобильные приложения, внешние сервисы или плагины. Однако именно через XML-RPC часто происходят атаки типа Brute Force и DDoS, если доступ открыт для всех.
Полное отключение XML-RPC может нарушить работу легитимных сервисов, поэтому иногда нужно отключать его только для неавторизованных пользователей, оставляя доступ для админов и доверенных аккаунтов.
Диагностика: как проверить, активен ли XML-RPC и кто его использует
- Откройте
https://yourdomain.com/xmlrpc.phpв браузере. Если видите сообщение «XML-RPC server accepts POST requests only.», сервис активен. - Проанализируйте логи сервера, например
access.log, на предмет частых POST-запросов к/xmlrpc.phpот неавторизованных IP. - Используйте WP Security Audit Log или аналогичные плагины для отслеживания успешных и неудачных вызовов через XML-RPC.
Пошаговое решение: отключение XML-RPC для гостей с помощью кода
Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:
add_filter('xmlrpc_enabled', function($enabled) {
if (!is_user_logged_in()) {
return false; // Отключаем XML-RPC для неавторизованных
}
return $enabled; // Разрешаем для авторизованных
});Этот фильтр отключит XML-RPC, если пользователь не вошёл в систему. Он не затронет админов или других авторизованных пользователей.
Альтернативный способ — блокировка через .htaccess
Если хотите ограничить доступ на уровне сервера, но разрешить авторизованным, это сложнее. Однако можно заблокировать большую часть внешних запросов:
# Блокировать xmlrpc.php для всех кроме определённых IP
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from 123.123.123.123 # IP администратора
</Files>Минус — IP администратора должен быть статичным, иначе доступ будет затруднён.
Проверка результата после внедрения
- Попробуйте выполнить POST-запрос к
/xmlrpc.phpнеавторизованным пользователем — должен вернуть ошибку или 403. - Войдите в WordPress под админом и проверьте работу мобильного приложения или плагина, использующего XML-RPC — функционал должен работать.
- Проверьте логи сервера — количество подозрительных запросов к
/xmlrpc.phpдолжно снизиться.
Частые ошибки и как их исправить
- Ошибка: Полностью отключили XML-RPC, нарушив работу плагинов или мобильного приложения.
Решение: используйте фильтрxmlrpc_enabled, а не полное удаление файла. - Ошибка: Блокировка через .htaccess не учитывает динамические IP.
Решение: используйте код в WordPress, где можно проверить авторизацию без привязки к IP. - Ошибка: После внесения кода появились ошибки PHP.
Решение: убедитесь, что код добавлен корректно, и нет синтаксических ошибок.
Практические советы по безопасности и производительности
- Не отключайте XML-RPC полностью, если используете Jetpack, мобильное приложение или другие сервисы, зависящие от него.
- Комбинируйте фильтр
xmlrpc_enabledс плагинами для ограничения количества запросов и блокировки по IP. - Используйте HTTPS для шифрования данных при работе с XML-RPC.
- Регулярно обновляйте WordPress и плагины для исправления уязвимостей.
Сравнение способов ограничения XML-RPC
| Метод | Плюсы | Минусы |
|---|---|---|
Фильтр xmlrpc_enabled в functions.php | Тонкий контроль, работает для авторизованных | Требует доступа к коду, не блокирует IP |
| Блокировка через .htaccess | Блокирует на уровне сервера, быстро | Не подходит для динамических IP, может заблокировать легитимных |
| Полное отключение плагином (например, Disable XML-RPC) | Простота, не требует кода | Может нарушить работу сервисов, нет гибкости |