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 geschreven in JavaScript.
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 van webapplicaties.

Hoe werkt XSS?
XSS richt zich vaak op webapplicaties die gebruikersinvoer niet correct controleren en opschonen.
Bijvoorbeeld, als een commentaarveld rauwe HTML of JavaScript toestaat zonder enige filtering, kan een aanvaller code zoals deze toevoegen:
<script>alert('Hacked!');</script>
Wanneer slachtoffers de pagina bekijken, wordt de kwaadaardige code in hun browser uitgevoerd.
Waarom XSS belangrijk is in cybersecurity
XSS kan leiden tot een grotere inbreuk:
- Accountovername (sessiecookies stelen om gebruikers te imiteren)
- Diefstal van gegevens (het vastleggen van formulierinvoer zoals wachtwoorden of creditcards)
- Phishing-aanvallen (het injecteren van valse 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 gemaakte link klikt.
Hoe XSS te voorkomen
- Invoer sanering & uitvoer codering: altijd gebruikersinvoer schoonmaken voordat het wordt verwerkt, gebruikersinvoer transformeren naar 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 werd gehaald.
Waarom het werkte: MySpace stond niet-ontsnapte HTML/attributen toe in profielvelden, waardoor opgeslagen scriptuitvoering in de browsers van bezoekers mogelijk was.
Lessen / fix: Juiste uitvoer codering, invoer sanering, verwijdering van HTML in profielvelden, en snelle patching. Samy kreeg later juridische gevolgen, en MySpace implementeerde filters.
Gerelateerde termen
- SQL-injectie
- DAST (Dynamische Applicatiebeveiligingstesten)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)