Как отключить XML-RPC в WordPress

Для тех, кто не знает, что такое XML-RPC — это WordPress API, позволяющий (удалённо) выводить, создавать, редактировать и удалять:

  • посты,
  • таксономии (рубрики, метки и прочее),
  • медиафайлы,
  • комментарии,
  • пользователей.

А также получать доступ к настройкам и изменять их.

Именно благодаря этому API работают различные приложения для iPhone, iPad и устройств на Android.

Так вот, в предыдущих версиях WordPress была вот такая штука в настройках:

настройки отключения XML-RPC в WordPress 3.4.2

Как известно, от «атома» WordPress отказался полностью, а протокол XML-RPC теперь установлен включенным по умолчанию.

Дело в том, что раньше протокол содержал некоторые уязвимости, а теперь их все залатали.

Для параноиков (я и сам такой) — чтобы отключить XML-RPC, вставляем этот код в functions.php:

add_filter('xmlrpc_enabled', '__return_false');

Мне вот например не приходится пользоваться приложениями для iOS или Android, я пробовал конечно — ну вообще не понравилось, так что этот протокол мне ни к чему.

Удаляем метатеги с xmlrpc.php из head сайта

Насколько я знаю, существует два метатега: <link rel="EditURI" /> (RSD) и <link rel="pingback" />.

Первый удаляется достаточно просто — хуком на wp_head. Чтобы удалить второй, вам скорее всего придётся открыть файл header.php в вашей теме wp и вручную удалить его из HTML-кода.

В теме вашего сайта этих тегов может и не быть.

Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Комментарии 17

  • Левон3 января 2013 в 09:01 #

    Прочитал статью про программу Windows Live Writer, и решил пользоваться ею, как все цивилизованные блогеры. Но при установке связи и авторизации с блогом возникли проблемы. Выскакивает окошко с надписью"Программа Windows Live Writer не может автоматически определять настройки блога. Для продолжения выберите тип блога" Выбираю WordPress 2.2 + Ниже окно для ввода адреса блога, предлагает ввести адрес в виде"http:////xmlrpc.php" Вот здесь и начинаются мучения. После ввода адреса дает ошибку:
    "Произошла ошибка при попытке подключится к вашей службе блога по адресу http://ayasam.ru/xmlrpc.php ". Когда ввожу этот адрес в командную строку, получаю такой ответ "XML-RPC server accepts POST requests only."
    Все другие варианты дают ошибку 404. мой сайт на WordPress 3.5 Искал в Инете инфу не нашел. Может кто сталкивался с этой проблемой?

    • Миша3 января 2013 в 15:01 #

      Windows Live Writer не использую, однако я заметил вот что:

      Выбираю WordPress 2.2

      мой сайт на WordPress 3.5

    • Миша3 января 2013 в 15:01 #

      http://ayasam.ru/xmlrpc.php. Когда ввожу этот адрес в командную строку, получаю такой ответ “XML-RPC server accepts POST requests only.”

      ну а это так и должно быть по идее.

  • Ruson25 июня 2013 в 05:06 #

    Здравствуйте ситуация как и у Левон.
    Обратил внимание на наличие ошибки 404 на сайте по адресу http://site.com/ru/xmlrpc.php

    Я так понял что ошибка возникает по причине установки плагина русификации Qtranslate так как путь http://site.com/xmlrpc.php (тоесть без приставки RU в УРЛ) выдает страницу с надписью "XML-RPC server accepts POST requests only."

    Естественно если полностью удалить строку

    <link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />

    в файле header.php проблемма исчезает, но я не думаю что это является наилучшим решением.

    Помогите решить проблемму.
    Спасибо

  • Ruson29 июня 2013 в 07:06 #

    Это мой первый сайт на вордпрес, я даже не знаю, шаблон верстал сам, а потом переносил на вордпресс.

    Сайт в никнейме.

    • Миша29 июня 2013 в 09:06 #

      если функ не используется, значит его надо отключить и не париться о вещах, о которых париться не нужно))

  • Ruson29 июня 2013 в 12:06 #

    К сожалению просто отключение не помогает, суть заключается в том что в шаблоне прописана строчка с урл

    <link rel="pingback" href="" />

    , который обрашается к файлу xmlrpc.php

    Англоязычная (по умолчанию) версия сайта работает отлично, а вот все страницы с русскоязычной версии выдают ошибку 404, что якобы на каждой русскоязычной странице имеется битая ссылка на файл ru/xmlrpc.php (гугл орет что много ошибок 404 на сайте)

    Поидее мультиязычный плагин должен был учесть этот момент, но не учел... либо как вариант, я гдето чтото упустил.

    В любом случае как вы считаете просто удаление даной строки

    <link rel="pingback" href="" />

    может както негативно повлиять на работу сайта или ее все же лучше оставить и искать другое решение проблемы.

    Спасибо

  • Валерий4 ноября 2014 в 15:11 #

    Здравствуйте Михаил! Помогите мне разобраться. Яндекс пишет "неверный формат документа", открываю, и вижу /xmlrpc.php?rsd. До этого было всё нормально, что это может быть и что сделать? Спасибо!

    • Миша4 ноября 2014 в 17:11 #

      Здравствуйте!
      Расскажите поподробнее.

      • Валерий5 ноября 2014 в 14:11 #

        Здравствуйте! Яндекс вебмастер - исключённые страницы - не поддерживается роботом - неверный формат документа - и указывает вот этот файл /xmlrpc.php?rsd. Я файл открывал, он заключен вот в эти теги <rsd xmlns....... Михаил, может надо весь файл скопировать?

  • Glad5 января 2015 в 11:01 #

    Спасибо за статью! Так-же написал про эту проблема на своем блоге.

  • Андрей26 февраля 2015 в 15:02 #

    Для программного удаления последнего линка типа можно воспользоваться следующим кодом:

    function link_rel_buffer_callback($buffer) {
    	$buffer = preg_replace('/(<link *?.*?\brel\b=["|\']\bpingback\b["|\'].*?\bhref\b(=["|\'](.*?)["|\'])*(.*?)(\/?>)(?=\s*?<))|(<link *?.*?\bhref\b(=["|\'](.*?)["|\'])*.*?\brel\b=["|\']\bpingback\b["|\'](.*?)(\/?>)(?=\s*?<))/', '', $buffer);
    	return $buffer;
    }
    function link_rel_buffer_start() {
    	ob_start("link_rel_buffer_callback");
    }
    function link_rel_buffer_end() {
    	ob_flush();
    }
    add_action('template_redirect', 'link_rel_buffer_start', -1);
    add_action('get_header', 'link_rel_buffer_start');
    add_action('wp_head', 'link_rel_buffer_end', 999);

    От нее не останется и следа )

  • Юрий22 июня 2015 в 19:06 #

    Спасибо Автору. Статья реально помогла при решении проблемы по загрузке сервера - было большое превышение после обновления WP.

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.
  • Миша: Привет ещё раз, не поверишь, реально не сталкивался с этим вопросом. По теории можно сказать следующее: во-первых,...

  • Миша: Привет, вообще без проблем, делаешь всё через require(), require_once() - выбирай любую, какая больше нравится.

  • Виталий Моргунов: Привет! Не могу разобаться, как я могу контролировать порядок подключения стилей. В моем случае мне нужно чтобы стили...

  • Миша: Спасибо!

  • w0rmak: Это было просто. Нашел код в интернете. Добавьте и себе ymaps.load(function () { var input = document.getElem...