Лучший способ отключить xmlrpc.php

3 мар. 2016 г., 20:48:38
Просмотры: 40.2K
Голосов: 33

Какой самый лучший способ отключить файл xmlrpc.php в WordPress, когда он вам не нужен?

0
Все ответы на вопрос 9
5
33

Начиная с WordPress 3.5 эта опция (XML-RPC) включена по умолчанию, и возможность отключить её из дашборда WordPress исчезла.

Добавьте этот фрагмент кода для использования в файле functions.php:

// Отключаем использование XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );

// Удаляем X-Pingback из заголовков
add_filter( 'wp_headers', 'disable_x_pingback' );
function disable_x_pingback( $headers ) {
    unset( $headers['X-Pingback'] );

return $headers;
}

Хотя этот код выполняет свою задачу, он может создавать нагрузку, если сайт подвергается атаке через частые запросы.
Лучше использовать следующий фрагмент кода в файле .htaccess.

# Блокируем запросы к xmlrpc.php в WordPress
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>

Или используйте этот код для запрета доступа к файлу xmlrpc.php в блоке сервера NGINX.

# Блокировка запросов к xmlrpc.php в nginx
location /xmlrpc.php {
    deny all;
}

Учтите, что отключение может повлиять на вход через мобильные приложения. Если я не ошибаюсь, мобильному приложению WordPress это необходимо.
Подробнее об использовании XML-RPC см. в Кодексе.

  • Всегда делайте резервную копию файлов перед редактированием или добавлением кода.


Редактирование/Обновление

@Prosti, -Вы абсолютно правы- насчёт возможностей, которые RESTful API предоставит для WordPress!

Я забыл упомянуть об этом. Он уже должен был быть интегрирован в ядро (WordPress версии 4.1), но тогда это было невозможно. Однако, похоже, он войдёт в ядро в WordPress 4.5.

Альтернативой на данный момент является этот плагин: WordPress REST API (Version 2)
Вы можете использовать его, пока RESTful API также не станет частью ядра WordPress.
Планируемая дата выхода WordPress 4.5 (12 апреля 2016 (+3 недели))

Для тех, кто интересуется RESTful, на Stackoverflow есть отличное сообщество и вики.

4 мар. 2016 г. 01:22:36
Комментарии

Если я правильно понимаю, мобильному приложению WordPress это не нужно - скорее всего, это не понадобится в будущем, когда мы перейдем на RESTful API WordPress (WordPress 4.5)

prosti prosti
4 мар. 2016 г. 09:55:38

Для тех, у кого все еще остается заголовок X-Pingback для отдельных записей/страниц. Нам нужно использовать другой фильтр, чтобы полностью его удалить: add_filter('pings_open', '__return_false', PHP_INT_MAX);.

James Vu James Vu
10 авг. 2016 г. 20:02:02

Добавление подобных вещей в functions.php приведет к потере всех изменений при смене темы. function.php предназначен только для целей дизайна, используйте плагин!

David David
20 сент. 2016 г. 14:07:24

@David, конечно, но людям лучше использовать папку mu-plugins, а не создавать отдельный плагин для этого. Когда людям нужна/используется такая функция, у них есть на то причина, и они не хотят, чтобы кто-либо (даже администратор) имел возможность отключить плагин.

Charles Charles
20 сент. 2016 г. 19:14:52

Похоже, что в первой строке конфигурации nginx отсутствует знак равенства (=). Вот что сработало у меня: location = /xmlrpc.php {

Dave Dave
7 февр. 2017 г. 21:45:56
0

Если у вас есть возможность заблокировать XML-RPC через конфигурацию веб-сервера, предложения @Charles хороши.

Если же вы можете отключить его только с помощью PHP, фильтр xmlrpc_enabled — не лучший способ. Как указано в документации: https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/ он отключает только XML-RPC методы, требующие аутентификации.

Вместо этого используйте фильтр xmlrpc_methods, чтобы отключить все методы:

<?php
// Отключаем все XML-RPC эндпоинты
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
9 апр. 2018 г. 10:56:49
0

Мы используем файл htaccess для защиты от хакеров.

# BEGIN защита xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END защита xmlrpc.php
3 мар. 2016 г. 21:34:38
0

Лучше всего отключить функции 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 на современном сервере.

3 мар. 2016 г. 21:35:46
0

Для крайне малого числа пользователей, которые размещают WordPress на серверах IIS, можно использовать модуль IIS URL Rewrite для наложения ограничений, аналогичных htaccess. Пример ниже предполагает, что реальный IP-адрес клиента передается в заголовке X-Forwarded-For, разрешенный IP-адрес — 55.55.555.555, а для всех остальных IP-адресов должен возвращаться HTTP 404.

<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>
20 сент. 2016 г. 19:03:51
0

Лучший способ - использовать файл .htaccess для блокировки всех запросов, добавив

# Блокировка запросов к WordPress xmlrpc.php
<Files xmlrpc.php>
order deny,allow
deny from all
allow from 1.1.1.1
</Files>

в конец файла. Но если вам нужен самый простой способ, использование плагина Disable XML-RPC-API сделает свою работу.

21 янв. 2021 г. 09:45:39
1

Недавно я установил Wordfence, который начиная с версии 6.3.12 имеет возможность блокировать прямой доступ к любым местам. Добавление /xmlrpc.php на страницу настроек в список запрещённых IP-адресов с опцией "Немедленно блокировать IP-адреса, которые обращаются к этим URL" теперь показывает одну блокировку попытки доступа примерно каждые 15 минут.

Это также имеет преимущество в возможности блокировать URL, чтобы избавиться от надоедливых ботов, которые возвращаются снова и снова с разными IP-адресами.

Я не знаю, разрешает ли он использование xmlrpc.php приложениями для валидных операций.

Первоначально у меня были некоторые проблемы с тем, что он вызывал ошибки 504 Timeout и 502 Bad Gateway на сервере, но, кажется, всё стабилизировалось.

Очень впечатлён результатом на данный момент, и он провёл ценную очистку профиля после того, как сайт был взломан до установки Wordfence, несмотря на то, что всегда использовались последние версии WordPress и плагинов.

Wordfence https://www.wordfence.com/

15 июл. 2017 г. 21:16:42
Комментарии

Добавление /xmlrpc.php в правило безопасности, блокирующее IP-адреса, которые обращаются к нему, может заблокировать легитимный трафик. Если сайт с включенными пингбеками ссылается на ваш сайт, он отправит запрос к этому URL и будет немедленно заблокирован... это может создать проблемы.

adam-asdf adam-asdf
22 сент. 2017 г. 21:38:09
0

Я использую для nginx этот небольшой код, и он работает на 100%

location ~* (/wp-content/.*\.php|/wp-includes/.*\.php|/xmlrpc\.php$|/(?:uploads|files)/.*\.php$) {
deny all;
access_log off;
log_not_found off;
return 444;
}
26 нояб. 2018 г. 12:54:23
0

Использование плагина безопасности (рекомендуется):

Один из самых простых способов заблокировать доступ к файлу xmlrpc.php в WordPress — это использование плагина безопасности, такого как Wordfence или Sucuri Security. Эти плагины часто имеют опции для блокировки XML-RPC или конкретных файлов, таких как xmlrpc.php.

Использование серверных правил для Apache

<Files xmlrpc.php>
    Order Deny,Allow
    Deny from all
</Files>

Использование серверных правил для Nginx

location ~* /xmlrpc.php {
        deny all;
        access_log off;
        log_not_found off;
    }

Перезагрузите ваш Nginx

sudo systemctl reload nginx

Отключение XML-RPC через wp-config.php:

define('XMLRPC_REQUEST', false);
9 окт. 2023 г. 17:12:46