Wat is XSS (Cross-Site Scripting)?
Cross-Site Scripting, of XSS, is een beveiligingsfout in websites die aanvallers in staat stelt schadelijke scripts aan webpagina’s toe te voegen. Meestal worden deze scripts in JavaScript geschreven.
Als iemand een pagina bezoekt die door XSS is aangetast, voert hun browser het script van de aanvaller uit. Dit kan resulteren in gestolen cookies, gekaapte sessies of acties die zonder toestemming van de gebruiker worden uitgevoerd.
XSS, net als SQL-injectie, wordt regelmatig vermeld in de OWASP Top 10 als een van de meest voorkomende kwetsbaarheden in webapplicaties.

Hoe werkt XSS?
XSS richt zich vaak op webapplicaties die gebruikersinvoer niet correct controleren en opschonen.
Bijvoorbeeld, als een commentaarvak ruwe HTML of JavaScript zonder enige filtering toestaat, zou een aanvaller code zoals deze kunnen toevoegen:
<script>alert('Hacked!');</script>
Wanneer slachtoffers de pagina bekijken, wordt de schadelijke code in hun browser uitgevoerd.
Waarom XSS belangrijk is in cybersecurity
XSS kan leiden tot een grotere inbreuk:
- Accountovername (sessie-cookies stelen om gebruikers te imiteren)
- Diefstal van gegevens (het vastleggen van formulierinvoer zoals wachtwoorden of creditcards)
- Phishing-aanvallen (het injecteren van nep-inlogformulieren)
- Malwarelevering (gebruikers omleiden naar kwaadaardige websites)
Soorten XSS
- DOM-gebaseerde XSS
- De aanval vindt volledig plaats in de browser door manipulatie van het Document Object Model (DOM) zonder betrokkenheid van de server.
- Opgeslagen XSS
- Kwaadaardig script wordt permanent opgeslagen op de server, zoals in de database of profielpagina.
- Gereflecteerde XSS
- Script wordt gereflecteerd van een webserver (bijv. in URL of foutmelding), het script wordt uitgevoerd wanneer het slachtoffer op een door aanvallers vervaardigde link klikt.
Hoe XSS te Voorkomen
- Invoersanitisatie & uitvoerencodering: altijd gebruikersinvoergegevens schoonmaken voordat ze worden verwerkt, gebruikersinvoer omzetten in een veilig formaat
- Gebruik Content Security Policy (CSP): beperkt welke scripts in de browser kunnen worden uitgevoerd.
- Vermijd eval() en inline JavaScript: om injectierisico’s te verminderen.
- Beveiligingstesten (DAST/IAST): voer beveiligingstesten uit om kwetsbaarheden vroegtijdig te detecteren
Voorbeeld in de Echte Wereld - Samy worm (MySpace, 2005)
Wat er gebeurde: Samy Kamkar publiceerde een MySpace-profiel dat een opgeslagen XSS-payload bevatte. Wanneer andere gebruikers het profiel bekeken, werd de payload in hun browsers uitgevoerd, het (a) voegde Samy toe als vriend, (b) voegde de zin “Samy is mijn held” toe aan hun profielen, en (c) repliceerde zichzelf naar de profielpagina’s van die gebruikers.
Impact: De worm verspreidde zichzelf naar ~1 miljoen gebruikers binnen ~20 uur, waardoor MySpace tijdelijk offline moest.
Waarom het werkte: MySpace stond niet-ontsnapte HTML/attributen toe in profielvelden, waardoor opgeslagen scriptuitvoering in de browsers van bezoekers mogelijk was.
Lessen / oplossing: Juiste uitvoerencodering, invoersanitisatie, verwijdering van HTML in profielvelden, en snelle patching. Samy kreeg later juridische consequenties, en MySpace implementeerde filters.
Gerelateerde termen
- SQL-injectie
- DAST (Dynamische Applicatiebeveiligingstests)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)