Cross-site scripting (XSS) is een kwetsbaarheid waarbij een aanvaller kwaadaardige code, meestal JavaScript, in een webpagina weet te plaatsen die vervolgens in de browser van andere bezoekers wordt uitgevoerd. De browser denkt dat de code van de website zelf komt en voert die gewoon uit.

Hoe XSS werkt

XSS ontstaat als een website tekst van een bezoeker op een pagina toont zonder die veilig te maken. Denk aan een reactie, een zoekterm of een profielnaam. Staat er code in die tekst, dan ziet de browser dat niet als gewone tekst maar voert hij die uit.

Er zijn drie hoofdvormen:

  • opgeslagen XSS: de code wordt bewaard, bijvoorbeeld in een reactie, en raakt iedereen die de pagina opent;
  • gereflecteerde XSS: de code zit in een link en werkt alleen voor wie die link opent;
  • DOM-gebaseerde XSS: de code wordt in de browser zelf verwerkt, zonder dat de server erbij betrokken is.

Mogelijke gevolgen

De code draait met dezelfde rechten als de website. Een aanvaller kan daarmee de inlogsessie van een bezoeker overnemen, handelingen uitvoeren namens die bezoeker, de pagina aanpassen of een nepformulier tonen om gegevens te verzamelen.

Het verschil met SQL-injectie is dat XSS niet de database aanvalt, maar de bezoekers van de website.

Hoe je XSS voorkomt

De kern is alles wat een bezoeker invoert te behandelen als tekst, niet als code. Dat gebeurt door tekens bij het tonen om te zetten naar een veilige weergave (escaping). Veel moderne frameworks doen dit standaard.

  • Controleer invoer en toon die altijd veilig.
  • Gebruik een Content Security Policy, waarmee de website aangeeft welke scripts mogen draaien.
  • Markeer sessiecookies als HttpOnly, zodat scripts ze niet kunnen lezen.
  • Houd het CMS en de plugins up-to-date, omdat daar vaak kwetsbaarheden in worden gevonden.