Если на сайте в логах появляются запросы к xmlrpc.php, это не всегда повод рубить доступ ко всему XML-RPC. Частая задача — убрать именно pingback’и, потому что они создают мусорные запросы, участвуют в брутфорсе и почти никогда не нужны для обычного сайта. При этом сам XML-RPC может оставаться рабочим для Jetpack, мобильного приложения WordPress или внешней публикации.
Ниже — практический сценарий: как отключить pingback’и точечно, что проверить до и после, и где обычно ломают рабочие интеграции.
Когда проблема действительно в pingback’ах
Сначала стоит убедиться, что вы боретесь именно с нужной причиной. Отключение XML-RPC целиком — грубый шаг. Он может сломать подключение некоторых сервисов, а вот отключение pingback’ов обычно безопаснее.
Типичные признаки
- в логах много POST-запросов на
/xmlrpc.php; - в панели безопасности или WAF видны попытки
pingback.ping; - на сайте появляются спамные уведомления о ссылках;
- нагрузка растёт не от посетителей, а от повторяющихся внешних запросов.
Если у вас уже отключён XML-RPC целиком, эта статья не поможет точечно убрать pingback’и — сначала нужно вернуть доступ к XML-RPC и уже потом ограничить только лишние методы.
Что важно не сломать
Перед изменениями проверьте, используете ли вы:
- Jetpack;
- мобильное приложение WordPress;
- внешние сервисы публикации или автопостинга;
- интеграции, которые обращаются к XML-RPC для авторизации или обновления контента.
Если хотя бы один из этих сценариев нужен, блокировать весь xmlrpc.php через серверный запрет — плохая идея. Лучше отключить только методы pingback.
Как отключить pingback’и через код
Самый надёжный способ — убрать методы pingback.ping и pingback.extensions.getPingbacks через фильтр xmlrpc_methods. Это не трогает остальные XML-RPC методы.
add_filter('xmlrpc_methods', function ($methods) {
unset($methods['pingback.ping']);
unset($methods['pingback.extensions.getPingbacks']);
return $methods;
});Код можно добавить в functions.php дочерней темы, но на практике безопаснее вынести его в небольшой mu-plugin, чтобы он не исчез при смене темы.
Вариант через mu-plugin
Создайте файл, например wp-content/mu-plugins/disable-pingbacks.php, и добавьте туда:
<?php
/**
* Plugin Name: Disable XML-RPC Pingbacks
*/
add_filter('xmlrpc_methods', function ($methods) {
unset($methods['pingback.ping']);
unset($methods['pingback.extensions.getPingbacks']);
return $methods;
});Такой вариант удобен тем, что он не зависит от темы и не требует отдельной активации в админке.
Если нужен более жёсткий вариант
Иногда pingback’и отключают не только на уровне XML-RPC, но и на уровне обычных комментариев, чтобы убрать внутренние и внешние уведомления о ссылках. Это уже отдельная задача.
Если вам нужно выключить именно уведомления о пингбеках и трекбеках в комментариях, используйте фильтр:
add_filter('default_ping_status', '__return_false');Но это не заменяет отключение XML-RPC pingback-методов. Первый вариант влияет на поведение комментариев и уведомлений, второй — на XML-RPC API.
Сравнение подходов
| Способ | Что отключает | Плюсы | Минусы |
|---|---|---|---|
Фильтр xmlrpc_methods | Только pingback-методы | Не ломает остальные интеграции | Нужно добавить код |
default_ping_status | Пингбеки и трекбеки в комментариях | Просто и быстро | Не отключает XML-RPC pingback API |
Полная блокировка xmlrpc.php | Весь XML-RPC | Максимально жёстко | Ломает внешние сервисы и синхронизацию |
Для большинства обычных сайтов достаточно первого варианта. Полную блокировку имеет смысл рассматривать только если вы точно знаете, что XML-RPC нигде не используется.
Диагностика после внедрения
После добавления кода проверьте не только админку, но и реальные ответы сервера. Это быстрее, чем гадать по косвенным признакам.
Что проверить вручную
- откройте
/xmlrpc.phpв браузере — страница может отвечать пусто или сообщать, что это endpoint XML-RPC, это нормально; - проверьте Jetpack, если он установлен;
- попробуйте публикацию через внешний сервис, если он у вас есть;
- посмотрите логи на повторяющиеся запросы к
pingback.ping.
Если у вас есть доступ к CLI, можно быстро убедиться, что файл доступен, а не заблокирован целиком:
curl -I https://example.com/xmlrpc.phpОтвет 405, 403 или 200 сам по себе ещё не говорит, что pingback’и отключены. Важнее проверить, что конкретный метод больше не вызывается и не проходит через XML-RPC.
Как проверить именно pingback.ping
Если у вас есть тестовый стенд, можно отправить XML-RPC-запрос с методом pingback.ping и убедиться, что он больше не работает. На боевом сайте лучше не экспериментировать с произвольными запросами без необходимости.
Практический ориентир простой: если в логах перестали появляться обращения к pingback.ping, а нужные интеграции продолжают работать, задача решена.
Частые ошибки и как их исправить
Отключили весь XML-RPC вместо pingback’ов
Это самая частая ошибка. Её делают через правила сервера, плагин безопасности или жёсткий deny в конфигурации. В результате перестаёт работать то, что зависит от XML-RPC, а причина проблемы остаётся не до конца понятной.
Исправление: верните доступ к xmlrpc.php и отключите только методы pingback через xmlrpc_methods.
Добавили код в тему, а потом сменили её
Если код лежит в functions.php, при смене темы он исчезнет. Для технической настройки это неудобно и рискованно.
Исправление: перенесите код в mu-plugin или в собственный мини-плагин.
Смешали pingback и trackback
Pingback’и и trackback’и — не одно и то же. Отключение default_ping_status влияет на комментарии и уведомления, но не выключает XML-RPC-методы pingback. Из-за этого кажется, что «ничего не сработало».
Исправление: разделите задачу на два уровня — API и комментарии.
Проверили только админку
Админка может выглядеть нормально, но внешний сервис уже не сможет отправить публикацию или обновить запись. Это особенно заметно, если сайт использует автоматизацию.
Исправление: после изменения обязательно проверьте реальный сценарий интеграции, а не только вход в панель.
Безопасность и производительность
Отключение pingback’ов само по себе не делает сайт «защищённым», но убирает один из лишних векторов шума. Это полезно, если сайт регулярно получает мусорные запросы к XML-RPC.
Если задача шире и вам нужно навести порядок в технических настройках WordPress, удобно делать это не набором разрозненных сниппетов, а через один инструмент для чистки и отключения лишнего. В таких случаях часто смотрят в сторону Clearfy Pro: он закрывает несколько типовых задач по оптимизации и отключению ненужных функций без ручного копирования кода. Подробности есть на странице Clearfy Pro.
Но даже если используете плагин, принцип тот же: сначала понять, что именно отключаете, потом проверить, не задели ли вы рабочие интеграции.
Короткий чек-лист перед выкладкой на прод
- Проверили, нужен ли XML-RPC хотя бы одному сервису.
- Отключили только
pingback.pingиpingback.extensions.getPingbacks. - Не блокировали
xmlrpc.phpна уровне сервера без необходимости. - Добавили код в mu-plugin или другой устойчивый к смене темы слой.
- Проверили Jetpack, мобильное приложение или внешний автопостинг.
- Посмотрели логи после изменения и убедились, что лишние запросы исчезли.
Если после правки сайт продолжает работать с нужными сервисами, а мусорные pingback-запросы пропали, значит решение внедрено корректно. Если же что-то сломалось, откатить изменение проще всего: удалить фильтр xmlrpc_methods и проверить, какой именно сервис зависел от XML-RPC.