De WordPress REST API is een ingebouwde interface waarmee externe applicaties, JavaScript-frontends, mobiele apps en diensten van derden via standaard HTTP-requests en JSON-data met uw WordPress-site kunnen communiceren. Hij werd in versie 4.7 (december 2016) opgenomen in WordPress core en is sindsdien de ruggengraat geworden van moderne WordPress-ontwikkeling, en stuurt alles aan, van de Gutenberg-blokeditor tot headless WordPress-architecturen.
Voordat de REST API bestond, was de enige programmatische manier om van buitenaf met WordPress te communiceren via XML-RPC, een ouder en veel beperkter protocol. De REST API verving die aanpak met iets veel flexibelers, maar introduceerde ook nieuwe beveiligingsoverwegingen die elke WordPress-site-eigenaar zou moeten begrijpen.
Standaard-endpoints en wat zij blootstellen
De REST API leeft op /wp-json/wp/v2/ bij elke WordPress-installatie. Out of the box stelt hij een breed scala aan endpoints bloot:
/wp-json/wp/v2/posts: geeft alle gepubliceerde berichten terug met hun volledige inhoud, auteur-ID's, categorieën, tags en verwijzingen naar uitgelichte afbeeldingen./wp-json/wp/v2/pages: zelfde als posts, maar voor statische pagina's./wp-json/wp/v2/users: toont alle gebruikers die ten minste één bericht hebben gepubliceerd. Dit is het meest beveiligingsgevoelige standaard-endpoint./wp-json/wp/v2/categoriesen/wp-json/wp/v2/tags: geven taxonomie-termen terug met beschrijvingen en aantallen berichten./wp-json/wp/v2/comments: toont openbare reacties, inclusief namen van reageerders en soms e-mailadressen als de site verkeerd is geconfigureerd./wp-json/wp/v2/media: toont geüploade mediabestanden met URL's, afmetingen en metadata./wp-json/wp/v2/search: biedt een zoek-endpoint dat de ingebouwde zoekfunctie van de site weerspiegelt./wp-json/(de root): geeft een volledige index van alle geregistreerde API-namespaces en routes terug, en onthult zo elke plugin die eigen API-endpoints registreert.
Plugins voegen vaak hun eigen namespaces toe. WooCommerce voegt /wp-json/wc/v3/ toe, Yoast SEO voegt endpoints toe onder zijn namespace, en contactformulier-plugins kunnen inzendings-endpoints blootstellen. De API-root-index onthult al deze, en geeft een aanvaller een helder beeld van welke plugins zijn geïnstalleerd.
Het risico van gebruikersopsomming
Het endpoint /wp-json/wp/v2/users is de meest besproken beveiligingszorg rond de REST API. Standaard kan iedereen dit endpoint bezoeken en een JSON-response krijgen met alle gebruikers die content hebben geschreven. Elke gebruikersinvoer bevat hun gebruikersnaam (het veld slug), weergavenaam, gebruikers-ID, avatar-URL en een link naar hun auteursarchief.
Waarom is dit belangrijk? Omdat gebruikersnamen de helft van de inlogvergelijking vormen. Weet een aanvaller dat uw beheeraccount de gebruikersnaam sarah_admin gebruikt, dan hoeft hij alleen het wachtwoord te raden (of bruteforcen). Zonder de REST API vergde het achterhalen van gebruikersnamen meer moeite, zoals het raden van auteursarchief-URL's als /?author=1. De REST API geeft deze informatie vrijelijk, in een gestructureerd, machineleesbaar formaat.
Dit is geen theoretische zorg. Geautomatiseerde bots scrapen routinematig /wp-json/wp/v2/users op WordPress-sites om doelwitlijsten te bouwen voor credential stuffing en bruteforce-aanvallen. Heeft uw site een gebruiker met de naam admin, dan is dat account het eerste doelwit.
Authenticatiemethoden voor de REST API
Niet-geauthenticeerde requests aan de REST API geven alleen openbaar beschikbare gegevens terug (gepubliceerde berichten, openbare gebruikersprofielen, enz.). Om via de API content aan te maken, bij te werken of te verwijderen, is authenticatie nodig. WordPress ondersteunt verschillende methoden:
- Cookie-authenticatie: dit is wat de Gutenberg-editor gebruikt. Wanneer u bij WordPress bent ingelogd, stuurt uw browser bij elk API-request sessiecookies mee. Een nonce-waarde voorkomt cross-site request forgery. Deze methode werkt alleen binnen de browsercontext.
- Application Passwords: geïntroduceerd in WordPress 5.6, waarmee u unieke wachtwoorden kunt genereren voor elke applicatie die API-toegang nodig heeft. Elk application password is gekoppeld aan een specifiek gebruikersaccount. U kunt ze afzonderlijk intrekken zonder uw hoofdwachtwoord te wijzigen. Ze worden via HTTP Basic Auth verstuurd en werken alleen over HTTPS.
- JWT (JSON Web Tokens): niet ingebouwd in WordPress core, maar beschikbaar via plugins zoals "JWT Authentication for WP REST API". JWT is populair voor headless WordPress-opzetten waarbij een frontend-applicatie gebruikers moet authenticeren en namens hen API-aanroepen moet doen.
- OAuth: ook beschikbaar via plugins. OAuth is de voorkeursmethode wanneer applicaties van derden namens uw gebruikers toegang nodig hebben tot de API van uw site, omdat het voorkomt dat wachtwoorden direct gedeeld worden.
Wanneer u de REST API daadwerkelijk nodig heeft
De REST API is geen optionele functie die u losjes kunt uitschakelen. Hij is diep geïntegreerd in WordPress core en veel plugins zijn ervan afhankelijk:
- Gutenberg-blokeditor: de hele bewerkervaring leunt op de REST API. Telkens wanneer u in de blokeditor een bericht aanmaakt, opslaat of bekijkt, communiceert deze met de REST API. Hem uitschakelen zou u terugdwingen naar de Classic Editor.
- Headless WordPress: gebruikt u WordPress als content management backend met een aparte frontend in React, Vue, Next.js of Nuxt, dan is de REST API (of zijn nieuwere tegenhanger WPGraphQL) de manier waarop de frontend content ophaalt.
- Mobiele apps: de officiële WordPress-mobiele app communiceert via de REST API met uw site. Veel custom apps voor lidmaatschapssites, leerplatforms of nieuwsmedia gebruiken hem ook.
- Plugin-functionaliteit: veel moderne plugins leunen voor hun beheerinterfaces op de REST API. Plugins die React of Vue gebruiken voor hun instellingenpagina's doen op de achtergrond API-aanroepen. WooCommerce, Jetpack, Yoast SEO en tientallen andere zouden zonder hem niet werken.
- Integraties met derden: Zapier, IFTTT en vergelijkbare automatiseringstools kunnen via de REST API met uw WordPress-site interageren, en zo workflows mogelijk maken zoals automatisch berichten aanmaken vanuit formulierinzendingen of content synchroniseren tussen platformen.
Beveiliging hardenen zonder dingen te breken
De juiste aanpak is niet om de REST API volledig uit te schakelen, maar om de delen die gevoelige informatie blootstellen te beperken. Hier zijn praktische stappen:
- Beperk het users-endpoint: vereis authenticatie voor
/wp/v2/users. Diverse beveiligingsplugins bieden dit met één schakelaar. U kunt ook een snippet toevoegen aanfunctions.phpvan uw thema of een eigen plugin die oprest_authentication_errorshookt om niet-geauthenticeerde toegang tot specifieke endpoints te blokkeren. - Verwijder de REST API-link uit HTML: WordPress voegt een
<link rel="https://api.w.org/">-tag toe in de HTML-head, waarmee de API-URL wordt aangekondigd. Het verwijderen schakelt de API niet uit, maar stopt het kenbaar maken van de locatie aan geautomatiseerde scanners. - Schakel ook XML-RPC uit: beveiligt u de REST API, schakel dan ook de oudere XML-RPC-interface (
/xmlrpc.php) uit, die zijn eigen verzameling bruteforce- en DDoS-kwetsbaarheden kent. - Gebruik een firewall-plugin: plugins als Wordfence, Sucuri of iThemes Security kunnen API-toegang beperken op basis van IP-adres, bekende kwaadaardige bots blokkeren en rate limiting toevoegen om geautomatiseerd misbruik te voorkomen.
- Verwijder ongebruikte plugin-endpoints: registreert een plugin API-routes die u niet nodig heeft, gebruik dan de filter
rest_endpointsom ze te verwijderen. Dat verkleint uw aanvalsoppervlak en voorkomt ook informatielekkage over welke plugins u heeft geïnstalleerd.
Wat InspectWP controleert
InspectWP controleert of de REST API openbaar toegankelijk is door te zoeken naar de tag <link rel="https://api.w.org/"> in de HTML-broncode van uw site. Daarnaast wordt getest of het endpoint /wp-json/wp/v2/users gebruikersgegevens teruggeeft zonder authenticatie, wat zou wijzen op een risico op gebruikersopsomming. Is de API-link-tag aanwezig, dan rapporteert InspectWP de gevonden REST API-URL. Worden gebruikersgegevens blootgesteld, dan wordt dit gemarkeerd als beveiligingszorg met de aanbeveling om dat endpoint te beperken tot uitsluitend geauthenticeerde requests.