Odpowiedzi:
Od wersji WordPress 3.5 ta opcja ( XML-RPC
) jest domyślnie włączona, a możliwość wyłączenia jej z WordPress dashboard
zniknęła.
Dodaj ten fragment kodu do użytku w 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;
}
Chociaż robi to, co mówi, może stać się intensywne, gdy witryna jest atakowana, uderzając w nią.
Lepiej użyj poniższego fragmentu kodu w swoim .htaccess
pliku.
# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>
Lub użyj tego, aby wyłączyć dostęp do xmlrpc.php
pliku z bloku serwera NGINX.
# nginx block xmlrpc.php requests
location /xmlrpc.php {
deny all;
}
Pamiętaj, że wyłączenie może mieć również wpływ na logowanie za pośrednictwem telefonu komórkowego. Jeśli mam rację, aplikacja mobilna WordPress tego potrzebuje.
Zobacz Codex, aby uzyskać więcej informacji na temat korzystania zXML-RPC
.
- Przed edycją / dodaniem należy zawsze wykonać kopię zapasową pliku (ów).
@Prosti, -Masz absolutną rację- co do opcji, które RESTful API
zaoferują WordPress!
Zapomniałem o tym wspomnieć. Powinien już był zintegrowany z rdzeniem ( WordPress wersja 4.1 ), co nie było wówczas możliwe. Ale jak się wydaje, będzie podstawą w WordPress 4.5.
Alternatywą dla tej chwili jest ta wtyczka: WordPress REST API (wersja 2)
Możesz jej używać do momentu, gdy Restful API
jest także rdzeniem WordPress.
Docelowa data wydania WordPress 4.5. (12 kwietnia 2016 r. (+ 3 w))
Dla tych, którzy są zainteresowani
RESTful
, na Stackoverflow jest bardzo fajna wiki społeczności.
X-Pingback
nagłówek dla pojedynczego posta / strony. Musimy użyć innego filtru, aby go usunąć całkowicie: add_filter('pings_open', '__return_false', PHP_INT_MAX);
.
functions.php
spowoduje utratę wszystkich efektów przy zmianie motywów. function.php
służy wyłącznie do celów projektowych, użyj wtyczki!
=
w pierwszym wierszu kodu conf nginx brakuje znaku równości ( ). To zadziałało dla mnie: location = /xmlrpc.php {
Jeśli masz możliwość zablokowania go za pomocą konfiguracji serwera internetowego, sugestie @Charles są dobre.
Jeśli możesz go wyłączyć tylko za pomocą php, xmlrpc_enabled
filtr nie jest właściwy. Jak udokumentowano tutaj:
https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/
wyłącza tylko metody xml rpc wymagające uwierzytelnienia.
Zamiast tego użyj xmlrpc_methods
filtra, aby wyłączyć wszystkie metody:
<?php
// Disable all xml-rpc endpoints
add_filter('xmlrpc_methods', function () {
return [];
}, PHP_INT_MAX);
Możesz sprawdzić, czy działa, wysyłając żądanie POST do pliku xmlrpc.php z następującą treścią:
<methodCall>
<methodName>system.listMethods</methodName>
</methodCall>
Jeśli filtr działa, powinny pozostać tylko 3 metody:
<?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>
możesz go szybko przetestować za pomocą 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
Używamy pliku htaccess, aby chronić go przed hakerami.
# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php
Najlepiej jest wyłączyć xmlrpc.php
funkcje za pomocą wtyczki zamiast usuwać lub wyłączać sam plik. Sam plik zostanie zastąpiony przy podstawowych aktualizacjach WordPress, a wtyczka sprawi, że będzie wyłączony po podstawowych aktualizacjach i po zmianie motywów.
Zobacz https://wordpress.org/plugins/search.php?q=disable+xml-rpc dla różnych wtyczek. Wszystkie mają niewielkie różnice.
Wtyczki te działają tak samo, jak funkcja dodana do functions.php
pliku motywu lub dodająca order,allow deny
regułę do .htaccess (jak opisano w innych odpowiedziach), z tą różnicą, że wtyczka lub funkcja wyłącza wywołania xmlrpc.php
przez PHP, a reguła w .htaccess działa poprzez wykorzystanie mod_rewrite na serwerze internetowym (tj. Apache lub Nginx). Nie ma znaczącej różnicy w wydajności między używaniem PHP i mod_rewrite na nowoczesnym serwerze.
Dla skrajnej mniejszości, która hostuje WordPress w IIS, możesz użyć modułu Przepisz URL IIS, aby wprowadzić podobne ograniczenia podobne do htaccess. W poniższym przykładzie założono, że prawdziwy adres IP klienta przychodzi w nagłówku X-Forwarded-For, znany adres IP na białej liście to 55.55.555.555 i że użytkownik chce odpowiedzieć HTTP 404 na adresy IP niebędące białymi listami.
<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>
W pierwszy sposób możesz wstawić kod add_filter('xmlrpc_enabled', '__return_false');
do pliku functions.php
lub wtyczki specyficznej dla strony. Wyraźne umieszczenie go w witrynie jest bardziej zalecane niż edycja pliku functions.php
.
Niedawno zainstalowałem Wordfence, który od wersji 6.3.12 ma możliwość blokowania bezpośredniego dostępu do dowolnej lokalizacji. Umieszczenie /xmlrpc.php na stronie Opcje na liście adresów IP zabronionego dostępu „Natychmiast blokuj adresy IP, które uzyskują dostęp do tych adresów URL” pokazuje teraz, że jedna próba jest blokowana co około 15 minut.
Ma to również tę zaletę, że może zablokować adres URL, aby uciec od tych brzydkich botów, które wracają z innym adresem IP raz za razem.
Nie wiem, czy zezwala na użycie pliku xmlrpc.php przez aplikacje do prawidłowych operacji.
Miałem pewne problemy z produkcją błędów 504 Limit czasu i 502 Bad Gateway na serwerze, ale wygląda na to, że ustąpił.
Jak na razie jestem pod dużym wrażeniem i stworzył on cenny profil czyszczenia po zhakowaniu witryny przed zainstalowaniem Wordfence i pomimo posiadania zawsze najnowszej wersji WordPress i wtyczek.
/xmlrpc.php
do reguły bezpieczeństwa zakazującej dostępu do adresów IP wydaje się, że może blokować legalny ruch. Jeśli witryna z włączonymi linkami pingback do Twojej witryny, wyśle żądanie do tego adresu URL i natychmiast zostanie zablokowane ... wygląda na to, że może to powodować problemy.