Hushfort

Wat is xmlrpc.php en hoe schakel ik het uit in WordPress?

Door Eureka Studio · Bijgewerkt op

Kort antwoord

Via XML-RPC kunnen apps inloggen op xmlrpc.php, een aparte deur die het verbergen van wp-login.php niet afsluit. Uitschakelen is veilig, tenzij je Jetpack of de WordPress-app gebruikt. Blokkeer het bestand in .htaccess, voeg het filter xmlrpc_enabled toe, of gebruik een plugin die inloggen via XML-RPC afsluit en pingbacks behoudt. Test het daarna.

Stappen

  1. 1Stap 1

    Controleer of xmlrpc.php antwoordt

    Ga naar yoursite.com/xmlrpc.php. Zie je "XML-RPC server accepts POST requests only.", dan staat de deur open.

    yoursite.com/xmlrpc.php antwoordt: XML-RPC server accepts POST requests only
  2. 2Stap 2

    Begrijp waarom het ertoe doet

    De Oppervlakscan van Hushfort probeert het echt. Op een open site meldt hij dat wachtwoorden kunnen worden geprobeerd buiten het verborgen inlogpad om, en dat system.multicall één verzoek honderden pogingen laat bevatten.

    Oppervlakscan in het Hushfort-overzicht: XML-RPC open, system.multicall ook open, en de REST-gebruikerslijst en auteursscan lekken de gebruikersnaam demo-admin
  3. 3Stap 3

    Kies hoe ver je hem afsluit

    Open Hushfort → Oppervlakbeveiliging en zet Oppervlakbeveiliging inschakelen aan. XML-RPC staat standaard op "Inloggen uitschakelen, pingbacks behouden (aanbevolen)", wat bij de meeste sites past. "Volledig uitschakelen" is het strengst, maar stopt Jetpack en de officiële app. Klik op Wijzigingen opslaan.

    Oppervlakbeveiliging ingeschakeld, met XML-RPC op Inloggen uitschakelen, pingbacks behouden (aanbevolen)
  4. 4Stap 4

    Test of inloggen via XML-RPC wordt geweigerd

    Klik terug in het Overzicht op Opnieuw scannen. De regel XML-RPC hoort nu te luiden: "Inloggen uitgeschakeld: wachtwoordpogingen worden geweigerd, pingbacks blijven werken."

    Oppervlakscan na de oplossing: XML-RPC, REST-gebruikerslijst, auteursscan en auteurslijst in sitemap allemaal gesloten

Waarom het ertoe doet

XML-RPC is een oude interface om WordPress op afstand te bedienen. Voordat de REST API bestond, publiceerden desktopeditors en mobiele apps er hun berichten mee. Hij wordt nog steeds met elke WordPress-site meegeleverd, op /xmlrpc.php, en accepteert nog steeds bij elk verzoek een gebruikersnaam en wachtwoord.

Daarmee is het een tweede inlogdeur. Het verbergen van wp-login.php raakt hem niet. Inloglimietcode die alleen het inlogformulier in de gaten houdt, ziet hem niet. En met system.multicall kan één HTTP-verzoek honderden wachtwoordgokken bevatten. Een limiet die verzoeken telt, ziet één poging waar er vijfhonderd waren.

Dit is geen theorie. We hebben deze laag gebouwd nadat een webwinkel via XML-RPC wachtwoordpogingen bleef ontvangen terwijl de inlogpagina al verborgen was.

Gebruik je XML-RPC? Waarschijnlijk niet als geen van deze punten op jou van toepassing is:

  • Je koppelt de site aan Jetpack.
  • Je publiceert of modereert vanuit de officiële WordPress-app.
  • Je gebruikt een oudere desktop-blogtool, of een dienst die om je WordPress-gebruikersnaam en -wachtwoord vraagt (in plaats van een applicatiewachtwoord) om namens jou te publiceren.
  • Je bent afhankelijk van pingbacks van andere blogs.

Twijfel je, sluit dan alleen het inloggen af en behoud pingbacks. Dat neemt het risico op wachtwoorden raden weg en laat de onschuldige onderdelen intact. Strenger kan later altijd nog.

Veelgemaakte fouten

  • De login verbergen en het daarbij laten. Wachtwoorden raden verhuist gewoon naar xmlrpc.php.
  • Het hele bestand blokkeren zonder te controleren. Jetpack en de officiële WordPress-app maken verbinding via XML-RPC. Gebruik je die, sluit dan alleen de inlogmethoden af of test zorgvuldig.
  • Op een schakelaar vertrouwen zonder te testen. Bij sommige methoden blijven delen van XML-RPC antwoorden. Controleer het resultaat altijd met een echt verzoek (zie stap 4, of controleer wat je site prijsgeeft).
  • De cachelaag vergeten. Blokkeert een CDN-regel xmlrpc.php al, dan heeft een instelling in WordPress geen zichtbaar effect. Dat is prima; weet alleen welke laag het werk doet.

Zonder plugin

Optie 1: het filter xmlrpc_enabled. Zet dit in een kleine must-use-plugin (wp-content/mu-plugins/no-xmlrpc-login.php) of in de functions.php van je childthema:

<?php
add_filter( 'xmlrpc_enabled', '__return_false' );

Dit schakelt XML-RPC-methoden uit waarvoor je moet inloggen. Pingbacks blijven werken, omdat die geen login nodig hebben. Op zichzelf verwijdert dit system.multicall niet, en het bestand beantwoordt nog steeds verzoeken. Om ook de multicall-methode te schrappen:

<?php
add_filter( 'xmlrpc_methods', function ( $methods ) {
    unset( $methods['system.multicall'] );
    return $methods;
} );

Optie 2: het bestand op de server blokkeren. Op Apache, in .htaccess:

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

Op Nginx: location = /xmlrpc.php { deny all; }. Dit is de strengste optie en kost de server niets, maar het schakelt ook pingbacks, Jetpack en de app uit, en het staat buiten WordPress, dus je vergeet het makkelijk als je van host verhuist.

Als er iets misgaat

  • Jetpack toont een verbindingsfout. Jetpack heeft XML-RPC nodig. Schakel over van "Volledig uitschakelen" naar "Inloggen uitschakelen, pingbacks behouden", of verwijder je serverregel.
  • De WordPress-app kan niet inloggen. Zelfde oorzaak. Gebruik de browser op je telefoon, of sta inloggen via XML-RPC toe en vertrouw op inloglimieten plus tweefactorauthenticatie.
  • Een publicatietool publiceert niet meer. Controleer of hij XML-RPC gebruikt. De meeste moderne tools zijn overgestapt op de REST API met applicatiewachtwoorden.

Met Hushfort

Het Achterdeurslot is onderdeel van Hushfort Pro. De Oppervlakscan, die laat zien of XML-RPC openstaat, zit in Hushfort Security, de gratis WordPress-beveiligingsplugin.

Het Achterdeurslot is onderdeel van de laag Oppervlakbeveiliging van Hushfort. Je hebt vier keuzes:

  • Inloggen uitschakelen, pingbacks behouden (aanbevolen): wachtwoorden raden via XML-RPC wordt onmogelijk, terwijl pingbacks en trackbacks blijven werken. Een goede keuze voor webwinkels.
  • Volledig uitschakelen: de strengste optie. Jetpack en de officiële app kunnen geen verbinding maken.
  • Alleen system.multicall uitschakelen: sluit massaal raden af en laat de rest met rust.
  • Niet wijzigen: de standaard van WordPress.

De Oppervlakscan controleert daarna het resultaat met echte verzoeken, zodat je ziet wat een buitenstaander ziet. Belastingbeveiliging rekent bovendien meer voor verzoeken aan xmlrpc.php dan voor een normale paginaweergave, wat resterend lawaai afremt.

Veelgestelde vragen

Is het veilig om XML-RPC uit te schakelen in WordPress?

Voor de meeste sites wel. Het moderne WordPress gebruikt de REST API voor de blokeditor en de meeste integraties. XML-RPC wordt nog gebruikt door Jetpack, de officiële WordPress-app en sommige oudere publicatietools, dus controleer die eerst.

Verbergt het verbergen van de inlogpagina ook xmlrpc.php?

Nee. xmlrpc.php accepteert zelfstandig gebruikersnamen en wachtwoorden, dus aanvallers kunnen daar blijven raden nadat je wp-login.php hebt verborgen.

Wat is system.multicall?

Een XML-RPC-methode die veel aanroepen in één verzoek uitvoert. Aanvallers gebruiken hem om honderden wachtwoordgokken in één verzoek te sturen, waarmee ze langs limieten glippen die verzoeken tellen.

Gaan pingbacks stuk als ik XML-RPC uitschakel?

Als je het hele bestand blokkeert wel. Sluit je alleen inloggen via XML-RPC af en laat je de pingbackmethode open, dan blijven pingbacks en trackbacks werken.

Schakelt het filter xmlrpc_enabled XML-RPC volledig uit?

Nee. Het schakelt alleen methoden uit waarvoor je moet inloggen. Het bestand antwoordt nog steeds en pingback-aanroepen werken nog. Vaak is dat precies wat je wilt, maar test het resultaat.

Meld een bug of vraag een functie aan

Je bericht gaat rechtstreeks naar het team dat Hushfort bouwt.

Waar gaat het over?

Alleen gebruikt om je te antwoorden.

We gebruiken deze gegevens alleen om je te antwoorden. Privacy