Відповіді:
Оскільки 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-адресу та негайно заблокується ... схоже, це може спричинити проблеми.