XSS LAB
v1.0Plaats een comment
Typ een comment of klik een voorbeeld-payload. Schakel "Escape output" om de fix te zien.
Voorbeeld-payloads
Comments-feed (slachtoffer-browser)
Zo ziet een andere bezoeker de pagina. Bij onveilige modus voert de browser het script uit.
Scenario's
Klik om een scenario uit te voeren of de URL te wijzigen.
// laad een scenario om te zien
Log ACTIVE
// Wat is XSS?
XSS is een aanval waarbij iemand stiekem JavaScript in een website injecteert. Die code wordt dan uitgevoerd in de browser van een andere bezoeker, alsof het van de site zelf komt. De aanvaller kan dan dingen lezen of doen in naam van het slachtoffer. Cross-Site Scripting (XSS) misbruikt dat een browser scripts uit een trusted origin onbeperkt uitvoert. Komt voor in 3 varianten (reflected, stored, DOM-based) en zit in OWASP Top 10 onder "Injection" / "Cross-Site Scripting".
// Reflected vs Stored vs DOM-based
Reflected: payload zit in de URL/request, server "kaatst" hem terug in de respons. Eénmalig effect. Werkt alleen als iemand op een geprepareerde link klikt.
Stored: payload wordt opgeslagen (bv. in een comment). Treft iedere bezoeker die de pagina opent. Veel gevaarlijker.
DOM-based: server doet niks fout, client-side JS zet onveilige data in de DOM (bv.
el.innerHTML = location.hash).
// Hoe stop je XSS?
- Output-escaping: bij elke
echonaar HTMLhtmlspecialchars()of equivalent. - Content Security Policy (CSP): browser mag alleen scripts laden van whitelisted origins, inline-scripts uit.
- HttpOnly + Secure cookies: JavaScript kan
document.cookieniet meer lezen. - Gebruik frameworks die default-escaping doen (React JSX, Vue templates, Twig autoescape).
- Vermijd
innerHTML: gebruiktextContentof veilige template-functies.