Ga naar inhoud
| Kennisbank | 5 min leestijd

Wat is een WordPress-nonce en waarvoor dient het?

Ontdek wat een WordPress-nonce is en hoe het jouw website beschermt tegen gevaarlijke CSRF-aanvallen.

Vintage messing hangslot met bijpassende sleutel op wit bureau, minimalistische compositie in warme ivoor- en houtskoolkleur.

Een WordPress-nonce is een eenmalig gegenereerde beveiligingscode die WordPress gebruikt om te controleren of een verzoek echt afkomstig is van de juiste gebruiker op het juiste moment. Het woord “nonce” staat voor “number used once” en dat zegt precies wat het doet: de code is tijdelijk en bedoeld voor één specifieke actie. In de rest van dit artikel beantwoorden we de meest gestelde vragen over hoe nonces werken, waartegen ze beschermen en hoe je ze correct inzet.

Hoe werkt een WordPress-nonce technisch gezien?

WordPress genereert een nonce door een combinatie van de huidige gebruiker, een tijdstempel, een actienaam en een geheime sleutel samen te voegen en daar een hash van te maken. Die hash wordt meegestuurd met een formulier of een verzoek. Wanneer WordPress het verzoek ontvangt, berekent het de hash opnieuw en vergelijkt die met de meegestuurde waarde. Komen ze overeen, dan is het verzoek geldig.

De actienaam speelt hierbij een belangrijke rol. Je koppelt een nonce altijd aan een specifieke actie, zoals het opslaan van een bericht of het verwijderen van een gebruiker. Zo zorgt WordPress ervoor dat een nonce die geldig is voor één actie, nooit gebruikt kan worden voor een andere. Dit maakt het systeem veel robuuster dan een simpele willekeurige code.

Waartegen beschermt een WordPress-nonce precies?

Een WordPress-nonce beschermt voornamelijk tegen Cross-Site Request Forgery, ook wel CSRF genoemd. Dit is een aanval waarbij een kwaadwillende website een verzoek namens een ingelogde gebruiker naar jouw WordPress-site stuurt, zonder dat die gebruiker het doorheeft. Omdat de aanvaller de geldige nonce niet kent, weigert WordPress het verzoek.

Nonces beschermen dus tegen situaties waarbij iemand misbruik maakt van de actieve sessie van een gebruiker. Denk aan het automatisch verwijderen van berichten, het aanpassen van instellingen of het uitvoeren van beheeracties, allemaal zonder dat de gebruiker daar bewust toestemming voor heeft gegeven.

Wat nonces niet doen, is de identiteit van een gebruiker vaststellen. Ze controleren alleen of een verzoek verwacht en geldig is, niet wie er precies achter het toetsenbord zit. Daarvoor zijn wachtwoorden en inlogsessies verantwoordelijk.

Wat is het verschil tussen een nonce en een wachtwoord of token?

Een nonce is geen vervanging voor een wachtwoord of een authenticatietoken. Het verschil zit in het doel: een wachtwoord bewijst wie je bent, een authenticatietoken bevestigt dat je toegang hebt, en een nonce controleert of een specifieke actie op dit moment geldig en verwacht is.

Hier zijn de drie begrippen naast elkaar gezet:

  • Wachtwoord: bewijst de identiteit van een gebruiker bij het inloggen
  • Authenticatietoken: geeft toegang tot een systeem of API voor een langere periode
  • Nonce: valideert één specifieke actie op één specifiek moment

Een nonce is ook niet geheim in de traditionele zin. Het staat gewoon in de broncode van een pagina of in een URL. De beveiliging zit hem in het feit dat de waarde tijdelijk is, gebonden aan een specifieke actie en alleen geldig voor de ingelogde gebruiker die hem heeft ontvangen.

Hoe gebruik je een nonce correct in WordPress-ontwikkeling?

Bij WordPress website ontwikkeling gebruik je nonces op een vaste manier. WordPress biedt hiervoor ingebouwde functies die je stap voor stap doorloopt:

  1. Genereer de nonce met wp_create_nonce( 'naam-van-de-actie' ) en voeg de waarde toe aan je formulier of URL.
  2. Voeg het veld toe aan een formulier met wp_nonce_field( 'naam-van-de-actie' ), zodat WordPress het automatisch meestuurt.
  3. Controleer de nonce aan de serverkant met check_admin_referer( 'naam-van-de-actie' ) of wp_verify_nonce() voordat je de actie uitvoert.
  4. Geef een foutmelding of stop de uitvoering als de nonce niet klopt.

Het is belangrijk dat de actienaam consistent is tussen het aanmaken en het controleren van de nonce. Een typfout in de naam zorgt ervoor dat elke controle mislukt, ook bij legitieme verzoeken. Goed WordPress onderhoud omvat ook het controleren of nonces correct zijn geïmplementeerd in maatwerkcode.

Wanneer verlopen WordPress-nonces en wat gebeurt er dan?

WordPress-nonces verlopen standaard na 24 uur, maar ze werken in twee tijdvensters van elk 12 uur. In het eerste venster is de nonce volledig geldig. In het tweede venster accepteert WordPress de nonce nog steeds, maar genereert het bij de volgende paginaweergave een nieuwe. Na 24 uur is de nonce definitief verlopen.

Wanneer een verlopen nonce wordt ingediend, weigert WordPress de actie en toont het een foutmelding. In de meeste gevallen ziet de gebruiker een melding dat de pagina verlopen is, met het verzoek om terug te gaan en het opnieuw te proberen. Dit is bewust zo ontworpen: een aanvaller die een oude nonce heeft onderschept, kan er niets meer mee doen.

Ontwikkelaars kunnen de verlooptijd aanpassen via de nonce_life filter, maar dit is zelden nodig en kan de beveiliging verzwakken als je de tijd te lang instelt.

Zijn WordPress-nonces echt veilig of hebben ze beperkingen?

WordPress-nonces bieden goede bescherming tegen CSRF-aanvallen, maar ze hebben wel degelijk beperkingen. Ze zijn geen alomvattende beveiligingsoplossing en mogen nooit als enige maatregel worden ingezet voor gevoelige acties. De beveiliging van het hele nonce-systeem staat of valt met de geheimhouding van de WordPress-geheime sleutels in het configuratiebestand.

De belangrijkste beperkingen op een rij:

  • Nonces beschermen niet als een aanvaller al volledige toegang heeft tot de sessie van een gebruiker
  • Ze zijn niet geschikt als authenticatiemiddel voor externe API-koppelingen
  • Als de geheime sleutels in het configuratiebestand zijn uitgelekt, zijn alle nonces onbetrouwbaar
  • Ze werken niet goed voor pagina’s die door zoekmachines worden gecached, omdat de nonce dan voor iedereen hetzelfde is

Kortom: nonces zijn een waardevol onderdeel van WordPress-beveiliging, maar ze werken het beste als onderdeel van een bredere aanpak waarbij ook sterke wachtwoorden, regelmatige updates en een goede hostingomgeving een rol spelen.

Hoe Appel en Eelman helpt met WordPress beveiliging

Technische concepten zoals nonces zijn precies het soort zaken waar veel MKB-ondernemers tegenaan lopen als ze zelf aan hun website willen sleutelen of maatwerk laten bouwen. Appel en Eelman zorgt ervoor dat dit soort beveiligingsdetails goed worden geregeld, zonder dat jij je er zelf in hoeft te verdiepen.

  • Professionele WordPress-websites waarbij beveiliging van het begin af aan goed is ingericht
  • Maatwerk formulieren en functionaliteiten die correct gebruik maken van nonces en andere beveiligingsmaatregelen
  • Begrijpelijke uitleg over wat er achter de schermen van jouw website gebeurt
  • Praktisch advies zonder technisch jargon, zodat jij weet waar je aan toe bent

Wil je weten hoe jouw WordPress-website er technisch voor staat of ben je op zoek naar een betrouwbare partner voor de bouw of het beheer ervan? Neem gerust contact op en we kijken samen wat er nodig is.

Kunnen we iets voor je betekenen?

Neem vrijblijvend contact op voor een kennismaking.

Neem contact op