Если на сайте включён XML-RPC, это не значит, что нужно рубить его целиком. На практике чаще всего хотят убрать именно pingback — старый механизм уведомлений о ссылках, который даёт лишний шум в логах и иногда используется для злоупотреблений. При этом у части сайтов через XML-RPC всё ещё работают внешние клиенты, мобильное приложение WordPress или интеграции для публикации.
Поэтому задача обычно не в том, чтобы «выключить XML-RPC вообще», а в том, чтобы отключить только pingback и не сломать рабочие сценарии. Ниже — как это проверить, что именно отключать, и как убедиться, что сайт после правки ведёт себя нормально.
Когда проблема действительно в pingback
Сначала стоит понять, что именно вы хотите убрать. Если в логах много запросов к /xmlrpc.php, это ещё не означает, что виноват pingback. Этот файл используют и другие методы XML-RPC. Но если вы видите массовые обращения от внешних IP, странные попытки pingback.ping или всплеск 403/200 на xmlrpc.php, то отключение pingback — разумный первый шаг.
Типичные признаки
- в access log часто встречается
/xmlrpc.php; - в логах безопасности видны вызовы
pingback.ping; - на сайте появляются уведомления о ссылках, которые вам не нужны;
- после отключения XML-RPC целиком ломается публикация через приложение или внешнюю интеграцию.
Если вам нужен только контроль над входящими пингбэками, не трогайте весь XML-RPC сразу. Это самый частый источник лишних поломок.
Диагностика: что использует ваш сайт сейчас
Перед изменениями проверьте, есть ли реальные зависимости от XML-RPC. На живом сайте это можно сделать без догадок.
Что проверить вручную
- используете ли вы мобильное приложение WordPress для публикации;
- подключён ли внешний редактор или сервис автопостинга;
- есть ли старые интеграции, которые отправляют записи через XML-RPC;
- не завязан ли на XML-RPC сторонний мониторинг или синхронизация.
Если сайт давно ведётся только через админку браузера, а внешних клиентов нет, риск минимален. Но если есть хотя бы один интеграционный сценарий, лучше сначала протестировать на staging-копии.
Как отключить только pingback через код
Самый практичный вариант — убрать поддержку pingback на уровне фильтра. Это не отключает XML-RPC целиком, но убирает метод pingback.ping из списка доступных методов. Для большинства сайтов этого достаточно.
<?php
add_filter( 'xmlrpc_methods', function( $methods ) {
if ( isset( $methods['pingback.ping'] ) ) {
unset( $methods['pingback.ping'] );
}
return $methods;
} );Код можно добавить в functions.php дочерней темы или в собственный мини-плагин. Для продакшена мини-плагин обычно надёжнее: он не зависит от темы и не исчезнет при обновлении.
Если нужно убрать только уведомления о входящих ссылках
Иногда задача ещё проще: вы не хотите, чтобы WordPress отправлял pingback на чужие сайты, когда вы ставите ссылку в контенте. Тогда можно дополнительно отключить саму отправку уведомлений.
<?php
add_filter( 'pre_option_default_ping_status', function() {
return 'closed';
} );Но этот вариант меняет поведение шире, чем просто XML-RPC. Если вам важно сохранить комментарии и часть старого механизма обсуждений, сначала проверьте, как у вас настроены обсуждения в Настройки → Обсуждение.
Если нужен более жёсткий вариант: блокировка xmlrpc.php
Иногда pingback — это только часть проблемы, а сам xmlrpc.php вообще не нужен. Тогда можно закрыть доступ к файлу на уровне сервера или через плагин безопасности. Это уже более жёсткое решение, и его стоит применять только после проверки зависимостей.
| Подход | Что делает | Риск |
|---|---|---|
Отключить pingback.ping через код | Убирает только pingback | Минимальный |
| Отключить XML-RPC плагином | Блокирует доступ к xmlrpc.php | Может сломать интеграции |
| Закрыть файл на сервере | Жёстко режет запросы | Нужно аккуратно тестировать |
Если вы не уверены, начинайте с фильтра xmlrpc_methods. Это самый предсказуемый путь.
Пошаговое решение без лишнего риска
- Проверьте, используются ли внешние клиенты, мобильное приложение или автопостинг.
- Сделайте правку на staging-копии, а не сразу на продакшене.
- Добавьте фильтр
xmlrpc_methodsи уберите толькоpingback.ping. - Очистите кеш, если у вас стоит кеширующий плагин или серверный кеш.
- Проверьте, что сайт по-прежнему принимает нужные вам XML-RPC запросы, если они есть.
Если на сайте используется плагин безопасности, проверьте, не дублирует ли он эту же блокировку. Два разных механизма защиты иногда дают ложные срабатывания в логах и мешают понять, что именно сломалось.
Как проверить, что всё сработало
Проверка должна быть не «на глаз», а по факту ответа сервера. Самый простой способ — отправить тестовый XML-RPC запрос и посмотреть, что происходит с методом pingback.
<?php
$xml = '<?xml version="1.0"?>
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>https://example.com/source</string></value></param>
<param><value><string>https://your-site.ru/post/</string></value></param>
</params>
</methodCall>';
$response = wp_remote_post( home_url( '/xmlrpc.php' ), array(
'headers' => array( 'Content-Type' => 'text/xml' ),
'body' => $xml,
) );
if ( is_wp_error( $response ) ) {
error_log( $response->get_error_message() );
} else {
error_log( wp_remote_retrieve_response_code( $response ) );
error_log( wp_remote_retrieve_body( $response ) );
}После отключения pingback вы должны увидеть, что метод больше не обрабатывается как раньше. При этом остальные нужные сценарии, если они есть, должны продолжать работать.
Дополнительно проверьте:
- открывается ли
/xmlrpc.phpв браузере без неожиданных ошибок сервера; - не сломалась ли публикация из внешнего клиента;
- не выросло ли число 500/403 в логах после изменения;
- очистился ли кеш на уровне плагина и CDN, если он есть.
Частые ошибки и как их исправить
Отключили XML-RPC целиком, хотя нужен был только pingback
Это самая дорогая ошибка. Внешняя публикация, приложение или интеграция перестают работать, а причина неочевидна. Если уже отключили всё, верните доступ и оставьте только фильтрацию метода pingback.ping.
Добавили код в тему, а потом потеряли его после обновления
Если правка лежит в родительской теме, она исчезнет при обновлении. Для постоянного решения используйте дочернюю тему или маленький must-use плагин.
Поставили плагин, который блокирует больше, чем нужно
Некоторые плагины безопасности закрывают xmlrpc.php полностью. Это нормально только если вы точно знаете, что никаких зависимостей нет. Иначе получите «починили одно — сломали другое».
Не проверили кеш
После правки старый ответ может продолжать отдаваться из кеша. Если тестируете сразу после изменений, очистите кеш плагина, серверный кеш и CDN, если он используется.
Что делать, если нужен безопасный компромисс
Если вы не хотите писать код, но и отключать всё целиком не готовы, используйте плагин безопасности или точечную настройку на сервере. Но даже в этом случае сначала проверьте, что именно он блокирует: pingback, весь XML-RPC или только часть методов. Важно понимать, что «защита от XML-RPC» и «отключение pingback» — это не одно и то же.
Для сайтов, где важны и безопасность, и предсказуемость, лучше придерживаться минимального вмешательства: убрать только ненужный метод, проверить логи и оставить остальное как есть. Это особенно полезно на проектах, где сайт поддерживает не один человек и где любое изменение должно быть объяснимо через код, а не через магию плагина.