Ответы:
Начиная с WordPress 3.5 эта опция (XML-RPC
) включена по умолчанию, и возможность отключить ее из WordPress dashboard
исчезла.
Добавьте этот фрагмент кода для использования в functions.php
:
// Disable use XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );
// Disable X-Pingback to header
add_filter( 'wp_headers', 'disable_x_pingback' );
function disable_x_pingback( $headers ) {
unset( $headers['X-Pingback'] );
return $headers;
}
Хотя он делает то, что говорит, он может стать интенсивным, когда сайт подвергается атаке, попав в него.
Вы можете лучше использовать следующий фрагмент кода в вашем .htaccess
файле.
# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>
Или используйте это, чтобы отключить доступ к xmlrpc.php
файлу из блока сервера NGINX.
# nginx block xmlrpc.php requests
location /xmlrpc.php {
deny all;
}
Имейте в виду, что отключение также может повлиять на вход через мобильный телефон. Если я прав, мобильное приложение WordPress нуждается в этом.
См. Кодекс для получения дополнительной информации об использованииXML-RPC
.
- Пожалуйста, всегда делайте резервную копию файла (ов) перед редактированием / добавлением.
@Prosti, -Вы абсолютно правы насчет вариантов, которые RESTful API
предложат для WordPress!
Я забыл упомянуть об этом. Он уже должен был быть интегрирован в ядро ( WordPress версии 4.1 ), что в то время было невозможно. Но, как кажется, будет основным в WordPress 4.5.
Альтернативой на данный момент является этот плагин: WordPress REST API (версия 2).
Вы можете использовать его до тех пор, пока он не Restful API
станет основным для WordPress.
Ориентировочная дата выпуска WordPress 4.5. (12 апреля 2016 г. (+ 3 Вт))
Для тех, кто интересуется
RESTful
, на Stackoverflow очень хорошее сообщество вики.
X-Pingback
заголовок для одного поста / страницы. Нам нужно использовать другой фильтр , чтобы удалить его полностью: add_filter('pings_open', '__return_false', PHP_INT_MAX);
.
functions.php
потеряет весь эффект при смене темы. function.php
только для дизайнерских целей, используйте плагин!
=
в первой строке conf-кода nginx отсутствует знак равенства ( ). Это сработало для меня: location = /xmlrpc.php {
Если у вас есть возможность заблокировать его через конфигурацию вашего веб-сервера, предложения @Charles хороши.
Если вы можете отключить его только с помощью php, xmlrpc_enabled
фильтр не правильный путь. Как описано здесь:
https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/
он отключает только методы xml rpc, требующие аутентификации.
Вместо этого используйте xmlrpc_methods
фильтр, чтобы отключить все методы:
<?php
// Disable all xml-rpc endpoints
add_filter('xmlrpc_methods', function () {
return [];
}, PHP_INT_MAX);
Вы можете проверить, работает ли он, отправив запрос POST в xmlrpc.php со следующим содержимым:
<methodCall>
<methodName>system.listMethods</methodName>
</methodCall>
Если фильтр работает, должно быть только 3 метода:
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<string>system.multicall</string>
</value>
<value>
<string>system.listMethods</string>
</value>
<value>
<string>system.getCapabilities</string>
</value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>
Вы можете быстро проверить это с помощью curl:
curl -X POST \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/xml' \
-d '<methodCall><methodName>system.listMethods</methodName></methodCall>' \
https://your-wordpress-site.com/xmlrpc.php
Мы используем файл htaccess, чтобы защитить его от хакеров.
# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php
Лучше всего отключить xmlrpc.php
функции с помощью плагина, а не удалять или отключать сам файл. Сам файл будет заменен при обновлении ядра WordPress, а плагин будет держать его отключенным после обновления ядра и при смене тем.
Видеть Https://wordpress.org/plugins/search.php?q=disable+xml-rpc для различных плагинов. Все они имеют незначительные различия.
Эти плагины выполняют ту же функцию, что и функция, добавляемая в functions.php
файл темы или добавляющая order,allow deny
правило в .htaccess (как указано в других ответах), с той разницей, что плагин или функция отключает вызовы xmlrpc.php
через PHP, и правило в .htaccess работает используя mod_rewrite в веб-сервере (то есть Apache или Nginx). Нет заметного различия в производительности между использованием PHP и mod_rewrite на современном сервере.
Для крайнего меньшинства, которое размещает WordPress в IIS, вы можете использовать модуль IIS URL Rewrite, чтобы выполнить аналогичные htaccess-подобные ограничения. В приведенном ниже примере предполагается, что в заголовке X-Forwarded-For указан истинный IP-адрес клиента, известным IP-адресом белого списка является 55.55.555.555, и вы хотите ответить HTTP 404 на IP-адреса, не входящие в белый список.
<rule name="wordpress-restrictions" enabled="true" stopProcessing="true">
<match url="(^xmlrpc.php)|(^wp-admin)|(^wp-login.php)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_X_FORWARDED_FOR}" pattern="(^55\.55\.555\.555$)" negate="true" />
</conditions>
<action type="CustomResponse" statusCode="404" subStatusCode="44" statusReason="File or directory not found" statusDescription="The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable." />
</rule>
В первом случае вы можете поместить код add_filter('xmlrpc_enabled', '__return_false');
в файл functions.php
или плагин для конкретного сайта. Ясно, что лучше указывать его в зависимости от сайта, чем редактировать файл functions.php
.
Я недавно установил Wordfence, который, начиная с версии 6.3.12, может блокировать прямой доступ к любому местоположению. Помещение /xmlrpc.php на страницу «Параметры» в списке IP-адресов с запрещенным доступом «Немедленно блокировать IP-адреса, которые обращаются к этим URL-адресам» теперь показывает, что одна попытка блокируется каждые 15 минут.
Это также имеет то преимущество, что может блокировать URL-адрес, чтобы скрыться от тех надоедливых ботов, которые снова и снова возвращаются с другим IP-адресом.
Я не знаю, позволяет ли он использовать xmlrpc.php в приложениях для допустимых операций.
У меня были некоторые проблемы с ним, приводившие к ошибкам 504 Timeout и 502 Bad Gateway на сервере, но, похоже, они устранились.
Результат впечатлил до сих пор, и он создал ценный профиль очистки после того, как сайт был взломан до установки Wordfence и несмотря на наличие последней версии WordPress и плагинов.
/xmlrpc.php
к правилу безопасности, запрещающему доступ к IP-адресам, может блокировать законный трафик. Если сайт с пингбэками включил ссылки на ваш сайт, этот сайт отправит запрос на этот URL и сразу же заблокируется ... похоже, это может вызвать проблемы.