Het internet is gebaseerd op vertrouwen. Wanneer een webgebruiker een site bezoekt, gaat hij ervan uit dat de knoppen waarop hij klikt de acties uitvoeren die erop vermeld staan. Cybercriminelen ontwikkelen echter voortdurend methoden om dit vertrouwen te misbruiken. Een van die misleidende methoden is de clickjacking-aanval.
Clickjacking vindt plaats wanneer een aanvaller een gebruiker misleidt om op iets anders te klikken dan waar de gebruiker eigenlijk op wilde klikken.
Door een transparante laag of een onzichtbaar iframe over een legitieme pagina te plaatsen, kunnen hackers klikken kapen die bedoeld zijn voor een nepknop of een onschadelijke link. Dit kan ernstige gevolgen hebben, zoals het downloaden van malware, het overmaken van geld of het onbewust liken van een pagina op sociale media.
Als website-eigenaar is het cruciaal om deze dreiging te begrijpen. Deze handleiding beschrijft de werking van deze UI-hersteltechniek, hoe u kwetsbaarheden kunt opsporenen de specifieke stappen om uw WordPress-site te beveiligen met behulp van de X-Frame-Options-header en Content Security Policy (CSP).
Inzicht in clickjacking-aanvallen: de risico's van UI-herstel
De term 'clickjacking' is een samenvoeging van 'click' (klikken) en 'hijacking' (kapen). In de beveiligingswereld staat het formeel bekend als een UI-redressing-aanval.
Deze naam beschrijft het mechanisme perfect: de aanvaller verandert de gebruikersinterface (UI) om de daadwerkelijke doelwebsite te verbergen.

Bij een standaard clickjacking-aanval maakt de aanvaller een kwaadaardige pagina aan. Deze pagina laadt een doelpagina, meestal een gevoelige pagina zoals een bankinlogpagina of een instellingenpaneel, binnen een iframe.
De aanvaller maakt de iframe volledig transparant. Vervolgens plaatst hij zijn eigen zichtbare inhoud, zoals een videospeler of een claim voor een gratis prijs, direct onder of over de onzichtbare iframe.
De gebruiker klikt op wat hij denkt dat een "Spelen"-knop of een "Prijs claimen"-link is. In werkelijkheid klikt hij op een onzichtbare pagina die vanaf een andere bron wordt geladen.
Omdat de computer en browser van de gebruiker nog steeds de sessiecookies voor de betreffende website bevatten , wordt de actie direct geverifieerd en verwerkt. De gebruiker heeft geen idee dat hij of zij zojuist een risicovolle actie heeft uitgevoerd.
Deze aanval maakt misbruik van de mogelijkheid van het web om content in frames weer te geven. Hoewel framing geschikt is voor het insluiten van kaarten of video's, wordt het gevaarlijk wanneer een webpagina niet expliciet beperkt wie de content mag framen.
Zonder adequate controle kan elke website het slachtoffer worden van UI-aanpassingen.
Lees meer: De werkelijke kosten van beveiligingsfouten in WordPress
Beveilig je WordPress-site voordat aanvallers toeslaan
Bescherm uw website tegen clickjacking en andere bedreigingen met de deskundige website-onderhoudsdiensten van Seahawk.
Hoe werken clickjacking-aanvallen met behulp van onzichtbare iframes en overlays?
Om het gevaar volledig te begrijpen, moeten we kijken naar de technische uitvoering. De kern van een clickjacking-aanval berust op de CSS-eigenschap 'opacity'.
Een aanvaller bouwt een loksite. Deze site dient als lokaas. Op deze pagina gebruikt de aanvaller HTML om de webpagina van het slachtoffer in een iframe te laden.
De code lijkt misschien onschuldig, maar de CSS vertelt een ander verhaal. De aanvaller stelt de transparantie (opacity) van de iframe in op 0,0. Hierdoor wordt de iframe onzichtbaar.
Hoewel de ingekaderde inhoud technisch gezien wel aanwezig is, kan de gebruiker deze niet zien. De aanvaller plaatst deze onzichtbare laag vervolgens precies over een zichtbare knop op zijn nepsite.
Stel je bijvoorbeeld voor dat een aanvaller je wil dwingen je blog te verwijderen. Ze laden de pagina 'Account verwijderen' van je blog in een onzichtbaar iframe. Ze plaatsen de onzichtbare 'Verwijderen'-knop direct over een zichtbare 'Win een cadeau'-knop op hun kwaadaardige website.
Wanneer de gebruiker op de knop 'Win een cadeau' klikt, gaat de klikgebeurtenis door de zichtbare elementen heen en bereikt het bovenste venster van het onzichtbare frame. De browser interpreteert dit als een legitieme klik op de knop 'Verwijderen'. Omdat de gebruiker waarschijnlijk is ingelogd in dezelfde browser, wordt de opdracht direct uitgevoerd zonder dat de gebruiker dit merkt.
Deze methode stelt aanvallers in staat om in sommige gevallen CSRF-tokens (Cross-Site Request Forgery) te omzeilen, omdat de browser het verzoek verzendt alsof de gebruiker fysiek op de knop op de legitieme pagina heeft geklikt.
Verder lezen: Hoe u malwarebescherming effectief kunt gebruiken om uw website te beveiligen
Belangrijkste soorten clickjacking-aanvallen en veelvoorkomende varianten
Hoewel de basisoverlay de meest voorkomende methode is, bestaan er verschillende varianten van clickjacking die zijn ontworpen om specifiek gedrag of browserkwetsbaarheden uit te buiten.

Likejacking: Misbruik maken van interacties op sociale media
Likejacking is een specifieke vorm van clickjacking die gericht is op sociale medianetwerken. De aanvaller probeert de gebruiker te manipuleren om een pagina te 'liken' of te 'delen' zonder diens toestemming.
In dit scenario bevat de onzichtbare iframe een van Facebook of een van Twitter . De aanvaller plaatst deze transparante laag over een video of afbeelding op een kwaadwillende pagina.
Wanneer de gebruiker op 'afspelen' klikt bij een video, 'liket' hij onbedoeld de pagina van de aanvaller. Dit vergroot de sociale geloofwaardigheid van kwaadwillende sites en vergemakkelijkt de verspreiding van spam of oplichting naar de vrienden van de gebruiker.
Geneste clickjacking- en X-frame-opties-kwetsbaarheden
Geneste clickjacking richt zich op webpagina's die frame-busting scripts proberen te gebruiken, maar deze niet correct implementeren. Sommige oudere browsers of specifieke configuraties stellen aanvallers in staat deze scripts te omzeilen.
Bij deze variant nestelt de aanvaller het doel-iframe in twee verschillende frames. Door de manier waarop de browser de vensterpositie en navigatie afhandelt te manipuleren, voorkomt de aanvaller dat de legitieme website uit het frame kan "breken".
Dit onderstreept waarom het niet aan te raden is om uitsluitend op client-side scripts te vertrouwen; robuuste server-side headers zijn vereist.
Verder lezen: Brute force-aanvallen op WordPress-websites voorkomen
Cursorjacking, Mousejacking en andere misleidende technieken
Cursorjacking is een zeer misleidende variant. Hierbij vervangt de aanvaller de echte muiscursor door een nep-cursor die door een andere gebruiker is gemaakt. Met behulp van CSS en JavaScript zorgt de aanvaller ervoor dat de echte cursor niet correct gepositioneerd is ten opzichte van de nep-cursor.
De gebruiker heeft de indruk dat de muiscursor boven een veilige link zweeft. De cursor zelf (die mogelijk onzichtbaar of verschoven is) bevindt zich echter boven een kwaadaardig element. Wanneer de gebruiker klikt, vindt de actie plaats op de locatie van de echte cursor, niet op die van de zichtbare nepcursor.
Op vergelijkbare wijze maken andere technieken gebruik van het snel verplaatsen van het onzichtbare kader om de muis te volgen (MouseJack), waardoor de kwaadaardige knop altijd onder de cursor blijft, ongeacht waar de gebruiker deze naartoe beweegt.
Meer weten: Virtuele patches in WordPress: hoe het werkt en waarom het belangrijk is
Hoe detecteer je clickjacking-kwetsbaarheden op je webpagina's?
Voordat je clickjacking kunt voorkomen, moet je controleren of je website kwetsbaar is. Gelukkig is het controleren op deze kwetsbaarheid vrij eenvoudig.
De eerste controle betreft het verifiëren of uw webpagina kan worden geladen binnen een iframe op een andere oorsprong. U kunt dit doen door een eenvoudig HTML-bestand op uw lokale computer te maken:
<html> <body> <iframe src="https://yourwebsite.com" width="500" height="500"></iframe> </body> </html>
Open dit bestand in moderne browsers, zoals Chrome of Firefox. Als uw website succesvol laadt binnen het venster, bent u kwetsbaar voor clickjacking.
Een beveiligde website zou de verbinding moeten weigeren of een lege ruimte moeten weergeven, wat aangeeft dat de browser de ingesloten inhoud heeft geblokkeerd.
Je kunt ook online beveiligingsscanners of browserextensies gebruiken die speciaal zijn ontworpen voor penetratietesten. Deze tools analyseren de HTTP-responsheader van je website.
Ze zoeken specifiek naar de afwezigheid van de X-Frame-Options-header of de Content Security Policy-header. Als deze headers ontbreken, zal de tool uw site als een hoog risico markeren.
Server-side preventie: X-Frame-Options gebruiken om framing te beperken
De meest traditionele en breed geaccepteerde verdediging tegen clickjacking is de X-Frame-Options (XFO)-header. Dit is een response-header die door de webserver wordt verzonden en de browser vertelt of een pagina in een bepaalde modus mag worden weergegeven.<frame> ,<iframe> ,<embed> , of<object> .

Wanneer een browser een pagina laadt, controleert hij deze header. Als het beleid wordt overtreden, zorgt de browser voor de veiligheid van de gebruiker door de inhoud niet weer te geven.
Er zijn doorgaans drie waarden die gebruikt worden met de X-Frame-Options-header:
- WEIGEREN: Dit is de strengste instelling. Het voorkomt dat een domein de gevraagde pagina in een frame kan weergeven. Zelfs als de pagina probeert zichzelf in te kaderen, zal dit mislukken. Dit is ideaal voor een gevoelige pagina die nooit hoeft te worden ingesloten.
- SAMEORIGIN: Hiermee kan de pagina alleen worden weergegeven in een frame door pagina's met exact dezelfde oorsprong (zelfde domein, protocol en poort). Dit is de meest gebruikte methode om WordPress-sites te beveiligen, omdat je hiermee je eigen content kunt insluiten en tegelijkertijd externe aanvallers kunt blokkeren.
- ALLOW-FROM uri: Deze richtlijn is verouderd en was bedoeld om framing vanuit een specifieke URI toe te staan. Veel moderne browsers ondersteunen deze richtlijn echter niet en het is over het algemeen beter om deze te vermijden ten gunste van nieuwere standaarden.
Door X-Frame-Options in te stellen op SAMEORIGIN is vaak voldoende om de overgrote meerderheid van clickjacking-aanvallen te stoppen. Het zorgt ervoor dat een aanvaller uw inlogpagina niet kan laden op zijn nepwebsite.
XFO heeft echter beperkingen. Het staat in feite slechts één domein (hetzelfde domein) toe, of helemaal geen. Het mist de nodige granulariteit als je meerdere specifieke partners wilt inschakelen om je content te framen. Daarvoor hebben we een modernere oplossing nodig.
Ontdek meer: Hoe maak je een met een wachtwoord beveiligde pagina op WordPress?
Geavanceerde beveiliging: Content Security Policy (CSP) en Frame-Ancestors
Hoewel X-Frame-Options effectief is, is Content Security Policy (CSP) de toekomst van de bescherming tegen clickjacking. CSP is een beveiligingslaag die helpt bij het detecteren en beperken van verschillende soorten aanvallen, waaronder Cross-Site Scripting (XSS) en data-injectie.
Om clickjacking te voorkomen, gebruiken we de `frame-ancestors`-richtlijn. Deze richtlijn specificeert de ouders die een pagina mogen insluiten.
Het implementeren van de Frame-Ancestors-richtlijn voor gedetailleerde controle
De `frame-ancestors`-richtlijn biedt veel meer flexibiliteit dan `X-Frame-Options`. Hiermee kunt u een lijst met domeinen definiëren die uw content mogen framen.
Een voorbeeld van een Content Security Policy (CSP)-header kan er als volgt uitzien:
Content-Security-Policy: frame-ancestors 'self' https://trusted-partner.com;
In dit voorbeeld:
- 'self' werkt net als de SAMEORIGIN XFO-richtlijn, waardoor hetzelfde domein de inhoud kan weergeven.
- https://trusted-partner.com maakt het mogelijk dat een specifieke externe site de inhoud in een frame plaatst.
Je kunt ook wildcards gebruiken of alle HTTPS- schema's toestaan met 'allow from https', hoewel strikte toegang veiliger is. Deze gedetailleerde controle is essentieel voor bedrijfswebsites die afhankelijk zijn van integraties tussen verschillende sites.
Waarom zijn CSP-framevoorouders superieur aan framebusting-scripts?
In het verleden gebruikten ontwikkelaars JavaScript -code om frames te doorbreken. Deze scripts werden aan de clientzijde uitgevoerd en controleerden of de bovenste vensterlocatie overeenkwam met de huidige vensterlocatie. Zo niet, dan probeerden ze uit het frame te breken.
Aanvallers vonden al snel manieren om deze scripts te neutraliseren. Browsers zoals Internet Explorer (in oudere versies) of functies zoals het HTML5-sandboxkenmerk op iframes konden voorkomen dat het frame-busting script werd uitgevoerd, waardoor de verdediging nutteloos werd.
Frame ancestors en X-Frame-Options zijn server-side controls. De aanvaller kan ze niet uitschakelen omdat de browser de regel afdwingt voordat de inhoud wordt weergegeven. De browser leest de response header en weigert simpelweg het kwaadwillige pagina-element weer te geven.
Het gebruik van CSP-frame-ancestors is momenteel de beste werkwijze omdat het gestandaardiseerd is in moderne browsers. Hoewel X-Frame-Options nog steeds nuttig is voor oudere browsers, hebben frame-ancestors de voorkeur in browsers die beide ondersteunen.
Stapsgewijs: Uw WordPress-site beveiligen tegen clickjacking
Om een WordPress-site te beveiligen, moet je de juiste headers toevoegen. Je hoeft geen ontwikkelaar te zijn om deze wijzigingen door te voeren, maar het is wel aan te raden om altijd een back-up van je site te maken voordat je serverbestanden bewerkt.

Stap 1: Headers configureren in .htaccess of functions.php
Als je WordPress-site op een Apache-webserver draait, kun je het .htaccess-bestand in je rootmap bewerken.
Om de X-Frame-Options-header te implementeren, voegt u deze regel toe:
<IfModule mod_headers.c>Header always append X-Frame-Options SAMEORIGIN</IfModule>
Om het Content Security Policy met frame-ancestors te implementeren:
<IfModule mod_headers.c>Voeg in de header altijd het Content-Security-Policy-bestand "frame-ancestors 'self';" toe.</IfModule>
Deze configuratie zorgt ervoor dat alleen uw eigen site uw pagina's kan weergeven. Om een partner toe te staan, voegt u eenvoudigweg hun URL toe na 'self'.
Als alternatief kunt u headers toevoegen via het functions.php-bestand van WordPress in uw actieve thema. Deze methode werkt ongeacht het servertype (Apache of Nginx), zolang PHP de headers maar correct verwerkt.
functie add_security_headers() { header('X-Frame-Options: SAMEORIGIN'); header("Content-Security-Policy: frame-ancestors 'self';"); } add_action('send_headers', 'add_security_headers');
Deze code grijpt in op het waarmee WordPress headers genereert en voegt de beveiligingsrichtlijnen toe aan elke webpagina die wordt weergegeven.
Stap 2: WordPress-beveiligingsplugins gebruiken voor client-side beveiliging
Als het bewerken van code te riskant aanvoelt, kunt u WordPress-beveiligingsplugins gebruiken. Veel uitgebreide beveiligingspakketten voegen deze headers automatisch toe.
- All-In-One Security (AIOS): Deze plugin heeft specifieke instellingen voor iframe-bescherming. U kunt 'Ongeldige query's weigeren' inschakelen en specifieke firewallregels instellen, waaronder vaak het beheer van frame-opties.
- Headers Security Advanced & HSTS WP: Deze speciale plugin stelt u in staat om specifieke HTTP-headers te configureren zonder dat u code hoeft aan te passen. U kunt X-Frame-Options selecteren in een dropdownmenu en deze instellen op SAMEORIGIN.
Plugins zijn weliswaar handig, maar zorg ervoor dat ze de responsheader correct configureren.
Sommige plugins voegen mogelijk alleen metatags, wat minder effectief is voor frame-ancestors (CSP via metatags ondersteunt geen frame-ancestors). Controleer het resultaat altijd met een online headerchecker.
Conclusie
De dreiging van clickjacking blijft bestaan omdat het misbruik maakt van de visuele waarneming van de gebruiker in plaats van een softwarefout. Zolang browsers iframes ondersteunen, zullen aanvallers proberen de gebruikersinterface aan te passen.
Voor een website-eigenaar betekent het negeren van deze kwetsbaarheid dat de veiligheid van gebruikers en de reputatie van de site in gevaar komen. Een gebruiker die malware downloadt of geld verliest door een knop op uw site, verliest het vertrouwen in uw merk.
De oplossing is een gelaagde verdediging.
- Audit: Scan uw webpagina's regelmatig om te zien of ze geschikt zijn voor frame-weergave.
- Implementeer XFO: Gebruik de X-Frame-Options-header ingesteld op SAMEORIGIN om gebruikers te beschermen op oudere browsers en andere browsers die CSP mogelijk niet volledig ondersteunen.
- Implementeer CSP: Neem de Content Security Policy frame-ancestors-richtlijn over voor robuuste, gedetailleerde controle in moderne browsers.
- Monitoren: Gebruik beveiligingsplugins om ervoor te zorgen dat headers actief blijven na thema- of serverupdates.
Door de manier waarop uw content wordt gepresenteerd te controleren, ontmantelt u effectief de onzichtbare lagen waarop hackers vertrouwen. U zorgt ervoor dat wanneer een gebruiker klikt, hij of zij de gewenste acties uitvoert, waardoor ze beschermd worden tegen een van de meest misleidende aanvallen op het web.
Veelgestelde vragen over een clickjacking-aanval
Wat is de meest gebruikte methode bij een clickjacking-aanval?
De meest gebruikte methode is het plaatsen van verborgen lagen over een legitieme webpagina. Een aanvaller creëert onzichtbare iframes die gebruikers ertoe verleiden te klikken op elementen die ze niet kunnen zien. Deze verborgen lagen stellen aanvallers in staat acties uit te voeren zonder dat de gebruiker het merkt, waardoor ze mogelijk toegang krijgen tot gevoelige functies.
Hoe helpt Same Origin X Frame Options clickjacking te voorkomen?
Same-origin X-Frame-Options is een response-header waarmee een pagina alleen kan worden ingekaderd door pagina's van exact dezelfde oorsprong. Dit voorkomt dat externe domeinen uw site in kwaadwillige frames insluiten en helpt ongeautoriseerde interacties te blokkeren.
Wat is het frame-ancestors-beleid in Content Security Policy?
Het frame ancestors-beleid definieert welke domeinen uw webpagina's mogen insluiten. Het is onderdeel van het Content Security Policy (CSP) en biedt meer controle dan oudere headers. Dit beleid is zeer effectief in het voorkomen van clickjacking-aanvallen.
Kunnen clickjacking-aanvallen aanvallers toegang geven tot gebruikersaccounts?
Ja, clickjacking kan aanvallers helpen om indirect toegang te krijgen tot accounts. Door knoppen en acties te maskeren, kunnen aanvallers gebruikers ertoe verleiden instellingen te wijzigen, machtigingen goed te keuren of formulieren in te dienen zonder dat ze het weten.
Wat is de beste manier om clickjacking op een WordPress-website te voorkomen?
De meest effectieve manier om clickjacking te voorkomen is door meerdere verdedigingsmechanismen in te zetten. Stel de X-Frame-Options response header in, pas een frame-ancestors policy toe en houd WordPress-beveiligingsplugins actief. Door deze maatregelen te combineren, worden aanvallen bij de bron geblokkeerd.