Відповіді:
Оскільки 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 цього потребує.
Див. Codex для отримання додаткової інформації про використанняXML-RPC
.
- Будь ласка, завжди створюйте резервну копію файлів (-ів) перед редагуванням / додаванням.
@Prosti, - Ви абсолютно праві - щодо варіантів, які RESTful API
запропонують для WordPress!
Я забув це згадати. Це вже повинно було бути інтегровано в ядро ( WordPress версії 4.1 ), що в той час було неможливо. Але, як здається, це буде ядро в WordPress 4.5.
На даний момент альтернативою є цей плагін: WordPress REST API (версія 2)
Ви можете використовувати його до тих пір, поки він не Restful API
є основним для WordPress.
Цільова дата виходу WordPress 4.5. (12 квітня 2016 р. (+ 3w))
Для тих, хто цікавиться
RESTful
, на Stackoverflow - дуже приємна вікі спільноти.
X-Pingback
заголовок для однієї публікації / сторінки. Нам потрібно використовувати інший фільтр , щоб видалити його повністю: add_filter('pings_open', '__return_false', PHP_INT_MAX);
.
functions.php
втратить усі ефекти при зміні тем. function.php
тільки для дизайнерських цілей, використовуйте плагін!
=
в першому рядку nginx conf-коду відсутній знак рівності ( ). Це спрацювало для мене: 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 -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, ви можете використовувати модуль перезапису URL-адреси IIS, щоб зробити подібні обмеження, схожі на htaccess. Наведений нижче приклад передбачає, що справжній клієнтський IP надходить у заголовку X-Forwarded-For, відомий 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-адресу та негайно заблокується ... схоже, це може спричинити проблеми.