WordPress: Wyłączenie protokołu XML-RPC

Spis treści

Jeśli publikujemy posty na swoim blogu, to pierw musimy je gdzieś sporządzić. Możemy to robić w zwykłym notatniku lub też bezpośrednio w formularzu WordPressa dostępnego przy edycji postu. Istnieje też inna możliwość, mianowicie korzystanie ze specjalnie przeznaczonego do tego celu oprogramowania -- klientów blogowych działających w oparciu o protokół XML-RPC. Jest to mechanizm podobny tego znanego choćby z poczty internetowej, czyli mamy konto email, np. na gmailu ale do tworzenia i zarządzania wiadomościami wykorzystujemy np. Thunderbirda. Podobnie możemy postępować z treścią pojawiającą się na blogu i nawet nie musimy być w tym czasie online. Jednym z bardziej znanych klientów, przy pomocy którego możemy wrzucać posty na bloga, to Windows Live Writer (WLW). Poza tym, protokół XML-RPC wykorzystywany jest także przez część serwisów internetowych, np. Flickr , co umożliwia im zamieszczanie postów w naszej witrynie.

Problemy z protokołem XML-RPC

Protokół XML-RPC we wcześniejszych wersjach WordPressa powodował dość spore problemy z bezpieczeństwem, w efekcie czego został domyślnie wyłączony ale nie zrezygnowano z niego zupełnie. Po wielu latach ten protokół powrócił do łask i deweloperzy WordPressa postanowili go domyślnie włączyć.

To czy dana strona jest zdolna do komunikacji za pośrednictwem protokołu XML-RPC można bardzo łatwo ustalić. Wystarczy przejrzeć źródło witryny i odszukać tam dwie linijki zawierające xmlrpc.php oraz wlwmanifest.xml , przykładowo:

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://morfitronik.lh/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://morfitronik.lh/wp-includes/wlwmanifest.xml" />

Plik xmlrpc.php jest odpowiedzialny za możliwość publikowania treści na stronie za pośrednictwem różnych klientów blogowych, klientów email oraz otrzymywanie pingbacków i trackbacków od innych blogów. Natomiast plik wlwmanifest.xml jest potrzebny jedynie klientowi Microsoftu. Nie każdy jednak korzysta z tego typu funkcjonalności, a jako że mogą one stwarzać spore zagrożenie, to przydałoby się je wyłączyć.

Czyszczenie nagłówka

Wyłączenie obsługi zbędnych rzeczy w WowrdPressie oprócz poprawy bezpieczeństwa ma jeszcze jedną zaletę, mianowicie oczyszcza kod, dzięki czemu wyszukiwarki lepiej traktują w rankingach takie artykuły. Dlatego też jeśli nie publikujemy postów zdalnie przy pomocy email czy tych klientów blogowych i nie korzystamy z pingbacków/trackbaków, które też potrafią sporo namieszać, to zwyczajnie dla świętego spokoju wyłączmy sobie obsługę protokołu XML-RPC. Najprościej możemy to zrobić przez dopisanie do pliku functions.php w używanym motywie poniższych linijek:

remove_action( 'wp_head', 'wlwmanifest_link' );
remove_action( 'wp_head', 'rsd_link' );
add_filter('xmlrpc_enabled', '__return_false');

Dwie pierwsze linijki usuną zbędny kod z nagłówka bloga, natomiast ostatnia wyłącza kompletnie obsługę protokołu XML-RPC i od tego momentu przy próbie, np. wysłania zdalnej wiadomości, zostanie zwrócony komunikat z błędem. Niemniej jednak, te dwa pliki dalej będą obecne na serwerze pod adresami http://domena.com/xmlrpc.php oraz http://domena.com/wp-includes/wlwmanifest.xml i przydałoby się o nie jakoś zatroszczyć. Unikajmy jednak stosowania kodu błędu 404 . Zamiast niego jest lepiej skorzystać z kodu 403 , który akurat jest generowany przy okazji stosowania modułu Files obecnego na serwerze Apache. By zabronić publice wglądu w te dwa powyższe pliki, dopisujemy do .htaccess poniższe kod:

<Files "xmlrpc.php">
    Require all denied
</Files>

<Files "wlwmanifest.xml">
    Require all denied
</Files>

Pingbacki i Trackbaki

Trzeba także pamiętać, że jeśli wyłączamy całkowicie protokół XML-RPC, to również musimy wyłączyć pingbacki i trackbaki w opcjach WordPressa (Settings => Discussion):

wordpress-xml-rpc-trackback

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.