Функции xmlrpc


Содержание

Отключаем XML-RPC для защиты WordPress сайта от DDoS атак

Мало кто знает, но в WordPress по умолчанию включена технология XML-RPC, с помощью неё можно удаленно не находясь за рабочим ПК, управлять сайтом, добавлять записи, удалять или редактировать комментарии, медиафайлы и т.д.

С одной стороны это удобно и кому-то жизненно необходимо, но большинству этот функционал не нужен. Я уверен что 98% пользователей сборки wordpress ни разу не пользовались удаленной публикацией и я отношусь к их числу. Однако даже не используя эту технологию можно хорошо пострадать от неё, ведь её используют для Ddos атаки на сайты…

Практически каждый год сайты на любимой WP попадают под массовые атаки, ddos и брут. Так прошлым летом хостинги сами закрывали доступ к админам и XML-RPC. А мы давайте не будем ждать проблем которые могут прийти в любую минуту, а поставим защиту прямо сейчас.

Если в лог файле видели много таким запросов:

Серверные классы XML-RPC и XML-RPCS

Класы XML-RPC CodeIgniter позволяет отправлять запросы на другой сервер, или создать свой собственный XML-RPC сервер чтобы получать запросы.

Что такое XML-RPC?

Довольно простой способ обмена данными между двумя компьютерами через интернет — использование XML. Компьютер, который отправляет XML-RPC запрос на другой компьютер, называется клиент. Принимающий запрос компьютер — сервер. Как только сервер получает и обрабатывает запрос, он отсылает назад ответ клиенту.

Например, с помощью MetaWeblog API, XML-RPC Клиент (обычно инструмент для публикаций) будет отправлять запрос на XML-RPC Сервер запущенный на вашем сайте. Этот запрос может являться новой записью блога, отправленной для публикации или это может быть запрос на редактирование существующующей записи. Когда XML-RPC Сервер получает этот запрос, он изучает его, чтобы определить, какие класс/метод должны быть вызваны для обработки запроса. После обработки сервер отправит обратно сообщение с ответом.

Подробные технические характеристики, вы можете изучить на XML-RPC сайте.

Использование XML-RPC класса

Инициализация класса

Как и большинство других классов CodeIgniter, классы XML-RPC и XML-RPCS инициализируется в вашем контроллере, используя функцию $this->load->library:

To load the XML-RPC class you will use:

После загрузки, xml-rpc библиотека объектов будет доступна через: $this->xmlrpc

Для загрузки класса XML-RPC Сервера следует использовать:

После загрузки, xml-rpcs библиотека объектов будет доступна через: $this->xmlrpcs

При использовании класса XML-RPC Сервера, следует загружать ОБА класса XML-RPC и the XML-RPC Сервер.

Отправка XML-RPC запросов

Для отправки запроса XML-RPC серверу необходимо указать следующую информацию:

  • URL сервера
  • Метод на сервере, который вы хотите использовать
  • Данные запроса (объяснение ниже).

Вот простой пример, который отправляет простой Weblogs.com пинг на Ping-o-Matic

Объяснение

Код выше инициализирует XML-RPC класс, с указанными URL сервера и методом для вызова (weblogUpdates.ping). Запрос (в нашем случае, заголовок и URL сайта) помещается в массив для отправки и компилируется функцией request(). Наконец, сформированный запрос будет отправлен. Если метод send_request() возвращает FALSE мы будет показано сообщение об ошибке отправленное XML-RPC Сервером.

Анатомия запроса

XML-RPC запрос — просто данные для передачи XML-RPC серверу. Каждая часть данных в запросе упоминается как параметр запроса. Пример выше имеет два параметра: URL и заголовок вашего сайта. Когда XML-RPC сервер получает ваш запрос, он ищет параметры в нем.

Параметры запроса должны быть помещены в массив для отправки и каждый параметр может быть одним из семи типов данных (строка, число, дата и т.д.). Если параметры представляют собой нечто иное чем строки, вам придется включить тип данных в массив запроса.

Вот простой пример массива с тремя параметрами:

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

В разделе ниже, предоставлены все типы данных.


Создание XML-RPC сервера

XML-RPC Сервер действует как «гаишник», ожидает входящие запросы и перенаправляет их в соответствующие функции для обработки.

Создание собственного XML-RPC сервера включает инициализацию класса XML-RPC Сервера в вашем контроллере, где ожидается появление входящего запроса, затем создается массив с такими инструкциями отображения, чтобы входящие запросы могли быть отправлены в соответствующий класс и метод для обработки.

Вот пример для иллюстрации:

Пример выше содержит массив определяющий два метода запроса допустимые на сервере. Допустимые методы находятся в левой части массива. Когда любой из них будет получен, они будут сопоставлены классу и методам в правой части массива.

Ключ ‘object’ это специальный ключ, который вы передаете в объект класса, который необходим при выполнении сопоставления метода и он не является частью CodeIgniter супер объекта.

Другими словами, если XML-RPC Клиент отправляет запрос в new_post метод, ваш сервер загрузит класс My_blog и вызовет new_entry функцию. Если запрос в update_post метод, ваш сервер загрузит класс My_blog и вызовет метод update_entry() .

Имена функции в примере выше являются произвольными. Вы сами решите как они должны называться на вашем сервере или если вы используете стандартизированный API, такие как Blogger или MetaWeblog API, вы будете использовать их имена функций.

Есть два дополнительных ключа для настройки, которые вы можете использовать при инициализации класса сервера: debug может быть установлен в TRUE для того, чтобы включить отладку и xss_clean может быть установлен в FALSE чтобы предотвратить отправку данных через метод xss_clean() библиотеки безопасности.

Обработка запросов сервером

Когда XML-RPC Сервер получает запрос и загружает класс/метод для обработки, он передаст объект в метод содержащий данные отправленные клиентом.

В примере выше, если предлагается метод new_post, сервер будет ожидать существование класса с этим прототипом:

Переменная $request — это объект, составленный сервером, который содержит данные, отправляемые XML-RPC клиентом. Используя этот объект, вы будете иметь доступ к параметрам запроса позволяющим обработать запрос. Когда все обработаете — будете отправлять ответ обратно клиенту.

Ниже приведен реальный пример Blogger API. Один из методов в Blogger API являеся getUserInfo() . С помощью этого метода XML-RPC клиент может послать серверу имя пользователя и пароль, а в ответ сервер отправляет обратно информацию о конкретном пользователь (nickname, user ID, email и т.д.). Вот как может выглядеть функция обработки:

Примечания:

Метод output_parameters() возвращает индексированный массив соответствующий параметрам запроса отправленного клиентом. В приведенном выше примере параметрами вывода будут логин и пароль.

Если имя пользователя и пароль отправленные клиентом являются недействительными, возвращается сообщение об ошибке используя метод send_error_message() .

Если операция была успешной, клиенту будет обратно отправлен массив содержащий информацию о пользователе.

Формат ответа

Аналогично Запросам, Ответы должен быть в виде массива. Однако, в отличие от запросов, ответ это массив который содержит один элемент. Этот элемент может быть массивом с несколькими дополнительными массивами, но там может быть только один индекс первичного массива. Иными словами, прототип этого:

Однако ответы, содержат несколько фрагментов информации, как правило. Для этого мы должны вложить ответ в свой собственный массив таким образом, чтобы основной массив содержал отдельную часть данных. Вот пример, показывающий, как это может быть реализовано:

Обратите внимание, что массив форматируется как строгий. Это наиболее распространенный тип данных для ответов.

Как и запрос, ответ может быть одним из семи типов данных, перечисленных в разделе Типы Данных.

Отправляем ответ ошибки

Если вам нужно отправить клиенту сообщение об ошибке, следует использовать следующие:

Первый параметр — номер ошибки, в то время как второй параметр — сообщение об ошибке.

Создание своих Клиента (Client) и Сервера (Server)

Чтобы помочь вам понять все, что мы рассмотрели до сих пор, давайте создадим пару контроллеров, которые действуют как XML-RPC Клиент и Сервер. Вы будете использовать клиент для отправки запроса на сервер и получите ответ.

Клиент (Client)

Используя текстовый редактор, создайте контроллер c названием Xmlrpc_client.php. Поместите в него этот код и сохраните этот файл в application/controllers/ каталоге:

В приведенном выше коде мы используем “url хелпер”. Вы можете найти больше информации на странице функции хелперов (помощников).

Сервер (Server)


Используя текстовый редактор, создайте контроллер c названием Xmlrpc_server.php. Поместите в него этот код и сохраните этот файл в application/controllers/ каталоге:

Илон Маск рекомендует:  RecodeTime - Функция Delphi

Пробуем!

Теперь посетите ваш сайт используя URL похожий на этот:

Теперь вы должны увидеть сообщение, которое вы отправили на сервер, и его ответ.

Созданный вами клиент отправляет сообщение (“How’s is going?”) на сервер, в “Greetings” метод. Сервер получает запрос и сопоставляет его с process() методом, где отправляется ответ.

Использование ассоциативных массивов параметром запроса

Если вы хотите использовать ассоциативный массив в параметрах метода вам нужно будет использовать тип данных struct:

Можно получить ассоциативный массив при обработке запроса на сервере.

Типы данных

Согласно XML-RPC spec существует семь типов значений, которые вы можете отправить через XML-RPC:

Справка класса

>CI_Xmlrpc initialize( [ $config = array() ] )

Параметры:
  • $config (массив) – Данные конфигурации
Возвращаемый тип:

Инициализирует XML-RPC библиотеку. Принимает ассоциативный массив содержащий параметры.

server($url [ , $port = 80 [ , $proxy = FALSE [ , $proxy_port = 8080 ] ] ] )

Устанавливает URL и номер порта сервера куда будет отправлен запрос:

Основная HTTP проверка подлинности также поддерживается, просто добавьте её в URL сервера:

timeout($seconds = 5)

Параметры:
  • $url (строка) – URL XML-RPC сервера
  • $port (число) – Порт сервера
  • $proxy (строка) – Дополнительный прокси-сервер
  • $proxy_port (число) – Прослушиваемый порт прокси-сервера
Возвращаемый тип:
Параметры:
  • $seconds (число) – Время ожидания в секундах
Возвращаемый тип:

Устанавливает время ожидания (в секундах), по истечении которого запрос будет отменен:

method($function)

Параметры:
  • $function (строка) – Имя метода
Возвращаемый тип:

Устанавливает метод, который будет запрошен у XML-RPC сервера:

Где method — имя метода.

request($incoming)

Принимает массив данных и строит запрос для отправки XML-RPC серверу:

send_request()

Параметры:
  • $incoming (массив) – Данные запроса
Возвращаемый тип:
Возвращает: TRUE при удаче, FALSE при неудаче
Возвращаемый тип: булево

Метод отправки запроса. Возвращает логическое значение TRUE или FALSE на основе успеха для неудачи, что позволяет использовать условно.

display_error()

Возвращает: Строку сообщения об ошибке
Возвращаемый тип: строка

Возвращает сообщение об ошибке в виде строки, если ваш запрос не удалось выполнить по каким то причинам.


display_response()

Возвращает: Ответ
Возвращаемый тип: смешанный

Возвращает ответ от удаленного сервера, как только получен запрос. Ответом обычно является ассоциативный массив.

send_error_message($number, $message)

Этот способ позволяет отправить сообщение об ошибке от сервера к клиенту. Первый параметр — номер ошибки, а второй параметр — сообщение об ошибке.

© Copyright 2014 — 2020, British Columbia Institute of Technology. Последнее обновление 22 Апреля 2020.

xmlrpc_get_type — Получает XML-RPC тип для значения PHP

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_get_type — Получает XML-RPC тип для значения PHP

Описание

Эта функция является ЭКСПЕРИМЕНТАЛЬНОЙ. Поведение этой функции, ее имя и относящаяся к ней документация могут измениться в последующих версиях PHP без уведомления. Используйте эту функцию на свой страх и риск.

Эта функция особенно полезна для base64 и строки, содержащей дату.

Список параметров

Возвращаемые значения

Возвращает тип XML-RPC.

Примеры

Пример #1 Пример XML-RPC типа

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

  • xmlrpc_set_type() — Устанавливает тип XML-RPC, base64 или datetime для значения строки PHP

Функции xmlrpc

Начиная с первых версий у Вордпресса есть функция удаленного управления сайтом. Эта же функция оповещает владельца сайта о том, что где-то оставили ссылку на его сайт. Это работает с помощью XML-RPC.

XML-RPC (XML Remote Procedure Call — Вызов удаленной процедуры) используется для подключения к сайту через мобильное приложение WordPress (android, ios), для трекбэков и пингбэков (когда другие сайты ссылаются на ваш сайт), и используется плагином Jetpack.

История XML-RPC

Когда к интернету подключались через модем и скорость подключения была низкой, было трудно публиковать страницы. Тогда решили создавать контент на компьютере и потом публиковать его на сайте. Сервис Blogger создал API и оффлайн-приложение для создания контента, и пользователи стали загружать контент на платформу через XML-RPC. После этого остальные блог-платформы сделали то же самое у себя.

В 2008-2009 годах компания Automattic, которая делает плагины WP Super Cache, WooCommerce, VaultPress, Jetpack и другие, выпустила приложение WordPress для мобильных, которое использует интерфейс XML-RPC.

XML-RPC был в Вордпресс с самого начала, но по умолчанию был выключен. После выхода мобильного приложения начиная с версии 3.5 функцию сделали включенной по умолчанию.

Проблема XML-RPC

Проблема включенного XML-RPC заключается в том, что роботы подбирают логин и пароль к сайту через файл xmlrpc.php практически без ограничений. Если на главной странице входа на сайт можно установить ограничение попыток авторизации, то через файл xmlrpc.php с помощью нескольких запросов можно попробовать сотни логинов и паролей.

Другая проблема в том, что злоумышленник может использовать пингбэк-сеть Вордпресс сайтов для DDoS атаки на один из этих сайтов, то есть невзломанные сайты сети атакуют выбранный сайт.

В итоге проблема не в самом XML-RPC, а в факте его использования. Если вы не пользуетесь этим функционалом, его лучше выключить.


В этой статье вы узнаете 3 способа отключить XML-RPC.

Как отключить XML-RPC в wp-config.php

Добавьте это правило в конце wp-config.php после строки require_once(ABSPATH . ‘wp-settings.php’);

Как отключить XML-RPC с помощью плагина

Если вы не хотите добавлять код, установите плагин Disable XML-RPC, он делает то же самое, что и код в первом способе.

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

Хотя эти 2 способа хорошо работают, они окажутся ресурсозатратными когда сайт атакуется хакерами. Когда хакбот приходит на сайт и перебирает комбинации логинов и паролей, он использует ресурсы вашего сервера.

Чтобы отключить xmlrpc.php и не дать хакерам нагрузить сервер, отключите xmlrpc в файле .htaccess. В этом случае запрос не будет передаваться в Вордпресс, и не будет нагружать сервер. Это самый правильный способ отключить XML-RPC.

Добавьте этот код в .htaccess:

Частичное отключение XML-RPC

Чтобы отключить XML-RPC частично, добавьте этот снипет в .htaccess:

Измените адреса на те, которым вы хотите разрешить подключение к XML-RPC. Добавьте столько адресов, сколько вам нужно.

Если вы не хотите добавлять код, используйте плагин Stop XML-RPC Attack, он создает правило в файле .htaccess, которое разрешает использовать XML-RPC только плагину Jetpack и другим инструментам Automattic.

Плагины iThemes Security, Anti-Malware Security and Brute-Force Firewall и All in One WP Security & Firewall ограничивают попытки авторизации на стандартной странице входа на сайт и через XML-RPC.

All in One WP Security & Firewall может частично отключить XML-RPC, чтобы работал функционал Jetpack.

Wordfence не отключает XML-RPC, так как разработчики считают, что Вордпресс улучшил встроенную защиту этой функции.

Надеюсь, статья была полезна. Оставляйте комментарии.

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

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

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

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

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

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

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

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

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

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

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

Насколько я знаю, существует два метатега:

  • (RSD) и
  • .


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

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

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

    Впервые познакомился с WordPress в 2009 году. С 2014 года меня можно встретить на WordCamp по всему миру — официальной конфе по WordPress, иногда там выступаю, но с 2020 выступаю только на тех, которые сам организовываю. Также периодически школа Epic Skills и LoftSchool приглашают меня вести у них уроки/вебинары.

    Если вам нужна помощь с вашим сайтом или может даже разработка с нуля — пишите мне.

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

    Прочитал статью про программу 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 Искал в Инете инфу не нашел. Может кто сталкивался с этой проблемой?

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

    xmlrpc.server — Basic XML-RPC servers¶

    The xmlrpc.server module is not secure against maliciously constructed data. If you need to parse untrusted or unauthenticated data see XML vulnerabilities .

    Create a new server instance. This > SimpleXMLRPCRequestHandler . The addr and requestHandler parameters are passed to the socketserver.TCPServer constructor. If logRequests is true (the default), requests will be logged; setting this parameter to false will turn off logging. The allow_none and encoding parameters are passed on to xmlrpc.client and control the XML-RPC responses that will be returned from the server. The bind_and_activate parameter controls whether server_bind() and server_activate() are called immediately by the constructor; it defaults to true. Setting it to false allows code to manipulate the allow_reuse_address > loads() function and controls which types are processed when date/times values or binary data are received; it defaults to false.

    Changed in version 3.3: The use_builtin_types flag was added.

    Create a new instance to handle XML-RPC requests in a CGI environment. The allow_none and encoding parameters are passed on to xmlrpc.client and control the XML-RPC responses that will be returned from the server. The use_builtin_types parameter is passed to the loads() function and controls which types are processed when date/times values or binary data are received; it defaults to false.

    Changed in version 3.3: The use_builtin_types flag was added.

    Create a new request handler instance. This request handler supports POST requests and modifies logging so that the logRequests parameter to the SimpleXMLRPCServer constructor parameter is honored.

    SimpleXMLRPCServer Objects¶

    The SimpleXMLRPCServer > socketserver.TCPServer and provides a means of creating simple, stand alone XML-RPC servers.

    SimpleXMLRPCServer. register_function ( function=None, name=None ) В¶

    Register a function that can respond to XML-RPC requests. If name is given, it will be the method name associated with function, otherwise function.__name__ will be used. name is a string, and may contain characters not legal in Python identifiers, including the period character.

    This method can also be used as a decorator. When used as a decorator, name can only be given as a keyword argument to register function under name. If no name is given, function.__name__ will be used.

    Changed in version 3.7: register_function() can be used as a decorator.

    Register an object which is used to expose method names which have not been registered using register_function() . If instance contains a _dispatch() method, it is called with the requested method name and the parameters from the request. Its API is def _dispatch(self, method, params) (note that params does not represent a variable argument list). If it calls an underlying function to perform its task, that function is called as func(*params) , expanding the parameter list. The return value from _dispatch() is returned to the client as the result. If instance does not have a _dispatch() method, it is searched for an attribute matching the name of the requested method.

    If the optional allow_dotted_names argument is true and the instance does not have a _dispatch() method, then if the requested method name contains periods, each component of the method name is searched for individually, with the effect that a simple hierarchical search is performed. The value found from this search is then called with the parameters from the request, and the return value is passed back to the client.

    Enabling the allow_dotted_names option allows intruders to access your module’s global variables and may allow intruders to execute arbitrary code on your machine. Only use this option on a secure, closed network.

    Registers the XML-RPC introspection functions system.listMethods , system.methodHelp and system.methodSignature .

    Registers the XML-RPC multicall function system.multicall.

    An attribute value that must be a tuple listing val > (‘/’, ‘/RPC2’) .

    SimpleXMLRPCServer Example¶

    The following client code will call the methods made available by the preceding server:

    register_function() can also be used as a decorator. The previous server example can register functions in a decorator way:

    The following example included in the Lib/xmlrpc/server.py module shows a server allowing dotted names and registering a multicall function.

    Enabling the allow_dotted_names option allows intruders to access your module’s global variables and may allow intruders to execute arbitrary code on your machine. Only use this example only within a secure, closed network.


    This ExampleService demo can be invoked from the command line:

    The client that interacts with the above server is included in Lib/xmlrpc/client.py :

    This client which interacts with the demo XMLRPC server can be invoked as:

    CGIXMLRPCRequestHandler¶

    The CGIXMLRPCRequestHandler class can be used to handle XML-RPC requests sent to Python CGI scripts.

    CGIXMLRPCRequestHandler. register_function ( function=None, name=None ) В¶

    Register a function that can respond to XML-RPC requests. If name is given, it will be the method name associated with function, otherwise function.__name__ will be used. name is a string, and may contain characters not legal in Python identifiers, including the period character.

    This method can also be used as a decorator. When used as a decorator, name can only be given as a keyword argument to register function under name. If no name is given, function.__name__ will be used.

    Changed in version 3.7: register_function() can be used as a decorator.

    Register an object which is used to expose method names which have not been registered using register_function() . If instance contains a _dispatch() method, it is called with the requested method name and the parameters from the request; the return value is returned to the client as the result. If instance does not have a _dispatch() method, it is searched for an attribute matching the name of the requested method; if the requested method name contains periods, each component of the method name is searched for individually, with the effect that a simple hierarchical search is performed. The value found from this search is then called with the parameters from the request, and the return value is passed back to the client.

    Register the XML-RPC introspection functions system.listMethods , system.methodHelp and system.methodSignature .

    Register the XML-RPC multicall function system.multicall .

    CGIXMLRPCRequestHandler. handle_request ( request_text=None ) В¶

    Handle an XML-RPC request. If request_text is given, it should be the POST data provided by the HTTP server, otherwise the contents of stdin will be used.

    Documenting XMLRPC server¶

    >xmlrpc.server. DocXMLRPCServer ( addr, requestHandler=DocXMLRPCRequestHandler, logRequests=True, allow_none=False, encoding=None, bind_and_activate=True, use_builtin_types=True ) В¶

    Create a new server instance. All parameters have the same meaning as for SimpleXMLRPCServer ; requestHandler defaults to DocXMLRPCRequestHandler .

    Changed in version 3.3: The use_builtin_types flag was added.

    Create a new instance to handle XML-RPC requests in a CGI environment.

    Create a new request handler instance. This request handler supports XML-RPC POST requests, documentation GET requests, and modifies logging so that the logRequests parameter to the DocXMLRPCServer constructor parameter is honored.

    DocXMLRPCServer Objects¶

    The DocXMLRPCServer > SimpleXMLRPCServer and provides a means of creating self-documenting, stand alone XML-RPC servers. HTTP POST requests are handled as XML-RPC method calls. HTTP GET requests are handled by generating pydoc-style HTML documentation. This allows a server to provide its own web-based documentation.

    DocXMLRPCServer. set_server_title ( server_title ) В¶

    Set the title used in the generated HTML documentation. This title will be used inside the HTML “title” element.

    DocXMLRPCServer. set_server_name ( server_name ) В¶

    Set the name used in the generated HTML documentation. This name will appear at the top of the generated documentation inside a “h1” element.

    DocXMLRPCServer. set_server_documentation ( server_documentation ) В¶

    Set the description used in the generated HTML documentation. This description will appear as a paragraph, below the server name, in the documentation.

    DocCGIXMLRPCRequestHandler¶

    The DocCGIXMLRPCRequestHandler > CGIXMLRPCRequestHandler and provides a means of creating self-documenting, XML-RPC CGI scripts. HTTP POST requests are handled as XML-RPC method calls. HTTP GET requests are handled by generating pydoc-style HTML documentation. This allows a server to provide its own web-based documentation.

    DocCGIXMLRPCRequestHandler. set_server_title ( server_title ) В¶

    Set the title used in the generated HTML documentation. This title will be used inside the HTML “title” element.


    DocCGIXMLRPCRequestHandler. set_server_name ( server_name ) В¶

    Set the name used in the generated HTML documentation. This name will appear at the top of the generated documentation inside a “h1” element.

    DocCGIXMLRPCRequestHandler. set_server_documentation ( server_documentation ) В¶

    Set the description used in the generated HTML documentation. This description will appear as a paragraph, below the server name, in the documentation.

    Как отключить функцию xmlrpc на WordPress

    Отключить функцию xmlrpc на wordpress можно двумя способами, вручную и с помощью плагина. Чтобы отключить xmlrpc вручную, зайдите в свою админ-панель wordpress, перейдите по вкладке: Внешний вид – Редактор , справа найдите и нажмите на вкладку – Функции темы (functions.php). На странице редактирования файла functions.php, в конец страницы или посередине, не важно, добавьте следующий код:

    После добавления кода, обновите файл. Далее, зайдите в корневую директорию вашего сайта на хостинге, где находятся все файлы вашего сайта, найдите файл .htaccess, откройте его и добавьте в него, в конец файла, следующий код:

    Данный код означает, что доступ к файлу xmlrpc.php закрыт, никто не сможет открыть данный файл.

    Отключаем функцию xmlrpc с помощью простого плагина , это для тех кто боится лезть в код. Всё, что вам нужно сделать, это установить и активировать плагин – Disable XML-RPC . Только установить и активировать и всё, больше ничего делать не надо, плагин не имеет настроек. После активации плагина, функция xmlrpc отключится автоматически, чтобы включить функцию обратно, деактивируйте плагин.

    xmlrpc_encode_request — Генерирует XML для метода запроса

    (PHP 4 >= 4.1.0, PHP 5, PHP 7)

    xmlrpc_encode_request — Генерирует XML для метода запроса

    Описание

    Эта функция является ЭКСПЕРИМЕНТАЛЬНОЙ. Поведение этой функции, ее имя и относящаяся к ней документация могут измениться в последующих версиях PHP без уведомления. Используйте эту функцию на свой страх и риск.

    Список параметров

    Имя метода для вызова.

    Параметры метода, совместимые с сигнатурой вызова.

    Массив, уточняющий параметры вывода, может содержать (значения по умолчанию выделены):

    output_type: php, xml

    verbosity: no_white_space, newlines_only, pretty

    escaping: cdata, non-ascii, non-print, markup (может быть строка с одним значением или массив с несколькими значениями)

    version: simple, xmlrpc, soap 1.1, auto

    encoding: iso-8859-1, другой набор символов, поддерживаемый iconv

    Возвращаемые значения

    Возвращает строку, содержащую XML-представление запроса.

    Примеры

    Пример #1 Пример клиентской функции XMLRPC

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

    • stream_context_create() — Создаёт контекст потока
    • file_get_contents() — Читает содержимое файла в строку
    • xmlrpc_decode() — Декодирует XML в нативные типы PHP

    Функции xmlrpc


    XML-RPC — is a remote procedure call protocol which uses XML to encode its calls and HTTP as a transport mechanism. Simon St. Laurent, Joe Johnston, Edd Dumbill. (June 2001) Programming Web Services with XML RPC. O Reilly. First Edition. ] OverviewXML RPC… … Wikipedia

    XML RPC — (сокр. от англ. Extensible Markup Language Remote Procedure Call XML вызов удалённых процедур) стандарт/протокол вызова удалённых процедур, основанный на SOAP, отличается исключительной простотой применения. XML RPC, как и любой другой интерфейс… … Википедия

    XML-RPC — es un protocolo de llamada a procedimiento remoto que usa XML para codificar los datos y HTTP como protocolo de transmisión de mensajes.[1] Es un protocolo muy simple ya que solo define unos cuantos tipos de datos y comandos útiles, además de una … Wikipedia Español

    XML-RPC — (Extensible Markup Language Remote Procedure Call) ist eine Definition zum Methodenaufruf (oder auch Funktionsaufruf) durch verteilte Systeme. Bei der Spezifikation wurde darauf Wert gelegt, dass eine Implementierung von XML RPC ohne großen… … Deutsch Wikipedia

    Xml-rpc — est un protocole RPC (Remote procedure call), une spécification simple et un ensemble de codes qui permettent à des processus s exécutant dans des environnements différents de faire des appels de méthodes à travers un réseau. XML RPC permet d… … Wikipédia en Français

    XML-RPC — est un protocole RPC (Remote procedure call), une spécification simple et un ensemble de codes qui permettent à des processus s exécutant dans des environnements différents de faire des appels de méthodes à travers un réseau. XML RPC permet d… … Wikipédia en Français

    RPC — can refer to:Organizations* Revolutionary Policy Committee, a faction within UK Independent Labour Party during the 1930s. * Rail Passengers Council, a network established by the Parliament of the United Kingdom to protect and promote the… … Wikipedia

    XML Interface for Network Services — Infobox Software name = XINS caption = developer = Orange Nederland Breedband B.V. released = ? frequently updated = yes programming language = ? operating system = Cross platform language = ? genre = Web services license = BSD website =… … Wikipedia

    RPC — Para el Estado socialista de China continental, véase República Popular China. El RPC (del inglés Remote Procedure Call, Llamada a Procedimiento Remoto) es un protocolo que permite a un programa de ordenador ejecutar código en otra máquina remota … Wikipedia Español

    .xml — Vorlage:Infobox Dateiformat/Wartung/magic fehltVorlage:Infobox Dateiformat/Wartung/website fehlt Extensible Markup Language Dateiendung .xml … Deutsch Wikipedia

    Защита WordPress от взлома XML-RPC в Ubuntu 14.04

    WordPress – это популярная производительная CMS (система управления контентом). К сожалению, популярность и распространённость этой системы привлекает нежелательное внимание – вредоносный трафик, направленный на сайт WordPress.

    Серверы, которые не были защищены или оптимизированы, часто сталкиваются с проблемами или ошибками вследствие получения небольшого количества вредоносного трафика. Такие атаки приводят к истощению системных ресурсов, в результате чего некоторые сервисы (например, MySQL) перестают отвечать на запросы. Наиболее распространенным внешним признаком такой атаки является сообщение Error connecting to database (ошибка подключения к базе данных) или ошибки веб-консоли Out of Memory.

    Данное руководство поможет защитить WordPress от атак XML-RPC в Ubuntu 14.04.

    Требования

    • Сервер Ubuntu 14.04.
    • Не-root пользователь с доступом к sudo (создать такого пользователя можно при помощи этого руководства). Все команды данного руководства следует выполнят в сессии этого пользователя.
    • Предварительно установленная система WordPress (для этого можно воспользоваться этим руководством).

    Что такое XML-RPC?

    XML-RPC – это протокол вызова удалённых процедур.

    WordPress использует XML-RPC для удалённого выполнения функций. Наиболее яркими примерами реализации этого протокола является популярный плагин JetPack и мобильное приложение WordPress. Однако этот протокол также можно использовать для отправки на WordPress огромного количества запросов за короткий промежуток времени (что, в сущности, является brute force атакой).

    Как определить атаку XML-RPC?

    Существует два основных способа распознать атаку XML-RPC:

    • Получение ранее упомянутого сообщения Error connecting to database.
    • Обнаружение в логах веб-сервера большого количества подобных записей:

    «POST /xmlrpc.php HTTP/1.0”

    Расположение лог-файлов веб-сервера зависит от дистрибутива Linux.

    Для выявления атак XML-RPC на Apache в Ubuntu 14.04 используйте:

    grep xmlrpc /var/log/apache2/access.log

    На сервере Nginx используйте команду:


    grep xmlrpc /var/log/nginx/access.log

    Сайт WordPress был подвержен атаке XML-RPC, если эти команды вернули очень объёмный вывод, содержащий множество подобных строк:

    111.222.333.444:80 555.666.777.888 — — [01/Jan/2020:16:33:50 -0500] «POST /xmlrpc.php HTTP/1.0» 200 674 «-» «Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)»

    Далее можно найти инструкции по предотвращению подобных атак.

    Метод 1: Установка плагина Jetpack

    В идеале следует защищать сервер от атак XML-RPC до того, как они произойдут. Функция Protect плагина Jetpack блокирует запросы multicall протокола XML-RPC. Записи XML-RPC по-прежнему будут поступать в логи сервера. Jetpack снизит нагрузку на БД, создаваемую вредоносными попытками входа, до 90%.

    Примечание: Для активации плагина Jetpack необходима учётная запись WordPress.com.

    Чтобы установить Jetpack, откройте панель управления WordPress и выберите Plugins->Add New.

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

    Чтобы загрузить, распаковать и установить плагин, нажмите Install Now. После успешной установки плагина рядом с ним появится ссылка Activate Plugin. Кликните по ней. После этого программа вернёт страницу Plugins, на которой появится сообщение Your Jetpack is almost ready! Чтобы завершить активацию плагина Jetpack, кликните по ссылке Connect to WordPress.com и подключитесь к учётной записи WordPress. После этого плагин будет включен, и программа предложит опцию Jump Start, которая автоматически включает основные функции Jetpack. Кликните Skip.

    Функция Protect будет включена, даже если вы пропустите Jump Start. На экране появится панель инструментов Jetpack, которая также покажет, что функция Protect активирована.

    Чтобы создать белый список IP-адресов, которые функция не должна блокировать, нажмите на изображение шестерёнки рядом с Protect.

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

    Метод 2: Блокировка трафика XML-RPC вручную

    Также можно вручную заблокировать трафик в настройках сервера Apache или Nginx.

    Отредактируйте конфигурационный файл Apache:

    sudo nano /etc/apache2/sites-available/000-default.conf

    Добавьте следующие строки в теги :

    Сохраните и закройте файл.

    Перезапустите веб-сервер, чтобы обновить настройки:

    sudo service apache2 restart

    Чтобы отредактировать конфигурационный файл Nginx, введите:

    sudo nano /etc/nginx/sites-available/ example.com

    Примечание: Укажите правильный путь файла.

    Затем добавьте в блок server следующие строки:

    server <

    location /xmlrpc.php <
    deny all;
    >
    >

    Сохраните и закройте файл, а затем перезапустите веб-сервер:

    sudo service nginx restart

    Важно! Этот метод остановит абсолютно все программы, использующие XML-RPC, в том числе Jetpack и мобильное приложение WordPress.

    Проверка защиты

    Какой бы метод защиты вы не выбрали, после настройки обязательно убедитесь, что всё работает.

    Если вы установили Jetpack и включили функцию Protect, запросы XML-RPC по-прежнему будут появляться в логах веб-сервера, но гораздо реже. Кроме того, Jetpack снижает нагрузку на БД сервера, которая возникает во время атаки, а также постепенно блокирует вредоносные IP-адреса.

    Если вы вручную заблокировали трафик XML-RPC, логи по-прежнему будут показывать попытки подключения, но код ошибки 200 изменится. К примеру, теперь запись может выглядеть так:

    111.222.333.444:80 555.666.777.888 — — [01/Jan/2020:16:33:50 -0500] «POST /xmlrpc.php HTTP/1.0» 500 674 «-» «Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)»

    Заключение

    Эти советы помогут устранить вредоносный трафик XML-RPC, благодаря чему сайт будет потреблять меньше ресурсов. Истощение системных ресурсов является наиболее распространенной причиной сбоя сайтов на WordPress.

    Илон Маск рекомендует:  Поиск с использованием AJAX.
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL
  • Параметры:
    • $number (число) – Номер ошибки
    • $message (строка) – Сообщение ошибки
    Возвращает:
    Возвращаемый тип: