XML-RPC to jedna z tych funkcji WordPress, o której większość właścicieli witryn nigdy nie słyszała — a mimo to działa po cichu w tle praktycznie każdej instalacji WordPress od ponad dekady. Plik xmlrpc.php znajduje się w katalogu głównym i przyjmuje żądania z zewnątrz. Pierwotnie był to jedyny sposób na zdalne zarządzanie blogiem WordPress. Dziś jest to przede wszystkim zagrożenie bezpieczeństwa, które atakujący chętnie wykorzystują.
Co XML-RPC faktycznie robi
XML-RPC oznacza Extensible Markup Language – Remote Procedure Call. Mówiąc prosto, jest to sposób, w jaki zewnętrzne oprogramowanie może komunikować się z Twoją witryną WordPress przez HTTP. Aplikacja zewnętrzna wysyła odpowiednio sformatowane żądanie XML do twojawitryna.com/xmlrpc.php, WordPress je przetwarza i zwraca odpowiedź XML.
Przez ten interfejs klienci zewnętrzni mogą m.in.:
- Tworzyć, edytować i usuwać wpisy oraz strony
- Przesyłać obrazy i inne media
- Moderować i zarządzać komentarzami
- Pobierać konfigurację witryny i metadane
- Wysyłać i odbierać pingbacki między blogami
Pomyśl o tym jak o prymitywnym API — funkcjonalnym, ale zaprojektowanym w czasach przed upowszechnieniem REST API.
Trochę historii
W połowie lat 2000 XML-RPC był Twoją jedyną opcją, jeśli chciałeś napisać wpis blogowy z telefonu lub aplikacji desktopowej takiej jak Windows Live Writer. WordPress zaadaptował MetaWeblog API i Blogger API, oba oparte na XML-RPC, aby umożliwić tym narzędziom komunikację z Twoją witryną.
W 2016 roku WordPress 4.7 wprowadził wbudowane REST API. Nagle pojawił się nowoczesny, ustandaryzowany sposób komunikacji z WordPress — taki, który używa JSON zamiast XML, obsługuje porządne uwierzytelnianie i jest znacznie łatwiejszy w użyciu. Od tego momentu XML-RPC stał się reliktem. Większość nowoczesnych wtyczek, aplikacji i integracji korzysta wyłącznie z REST API.
Dlaczego XML-RPC stanowi problem bezpieczeństwa
Plik jest domyślnie publicznie dostępny na każdej witrynie WordPress. Samo w sobie nie jest to idealne, ale prawdziwe problemy leżą głębiej:
- Wzmocnienie brute-force — XML-RPC ma metodę zwaną
system.multicall, która pozwala spakować setki żądań w jednym. Atakujący może przetestować 500 kombinacji nazwy użytkownika i hasła w jednym żądaniu HTTP. Wiele wtyczek zabezpieczających logowanie nawet tego nie zauważa, ponieważ monitorują tylkowp-login.php. - Nadużywanie pingbacków — Funkcja pingback może być wykorzystywana do ataków DDoS. Atakujący każe tysiącom witryn WordPress "pingować" docelowy serwer, zamieniając niewinne witryny w faktyczny botnet. Zdarzało się to wielokrotnie w praktyce.
- Enumeracja nazw użytkownika — Nawet bez prawidłowych danych logowania odpowiedzi XML-RPC mogą potwierdzić istnienie nazwy użytkownika, dając atakującym połowę informacji, których potrzebują.
- Niepotrzebna powierzchnia ataku — Każdy publicznie dostępny endpoint, który przyjmuje uwierzytelnianie, jest potencjalną drogą wejścia. Jeśli nie używasz XML-RPC, pozostawienie go otwartego jest jak niezamknięte drzwi, których nigdy się nie używa.
Kto naprawdę go jeszcze potrzebuje?
Szczera odpowiedź: praktycznie nikt. Jest kilka wyjątków:
- Jetpack kiedyś mocno polegał na XML-RPC, ale przeszedł na REST API. Nowsze wersje Jetpack działają bez XML-RPC dla większości funkcji.
- Bardzo stare aplikacje mobilne — Obecna mobilna aplikacja WordPress używa REST API. Tylko przestarzałe wersje sprzed 2016 roku nadal wymagają XML-RPC.
- Przestarzałe narzędzia firm trzecich — Niektóre prastare przepisy IFTTT lub platformy publikacyjne mogą jeszcze go używać, ale dla wszystkich istnieją alternatywy.
Jeśli żadne z tych nie dotyczy Twojego przypadku, nie ma dobrego powodu, aby zostawiać XML-RPC włączone.
Jak wyłączyć XML-RPC
Najszybsza metoda to filtr w functions.php Twojego motywu lub w niestandardowej wtyczce:
add_filter('xmlrpc_enabled', '__return_false');To wyłącza metody XML-RPC, ale plik wciąż zwraca odpowiedź. Aby całkowicie zablokować dostęp na poziomie serwera, dodaj to do swojego .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>Lub jeśli używasz Nginx:
location = /xmlrpc.php {
deny all;
return 403;
}Wiele wtyczek bezpieczeństwa (Wordfence, iThemes Security, Sucuri) oferuje również przełącznik do wyłączenia XML-RPC jednym kliknięciem.
Jak InspectWP pomaga
InspectWP sprawdza, czy Twój endpoint xmlrpc.php jest osiągalny z zewnątrz. Jeśli odpowiada na żądania, raport oznacza to i wyjaśnia, dlaczego powinieneś rozważyć jego wyłączenie — zwłaszcza jeśli Twoja witryna nie ma uzasadnionego powodu, aby utrzymywać go aktywnym.