Cross-Site Scripting (XSS) er en sikkerhedssårbarhed, hvor en angriber får ondsindet JavaScript eksekveret i en anden brugers browser via et legitimt website. Angrebet udnytter manglende håndtering af brugerinput og brud på tillidsgrænsen mellem data og kode.
XSS opstår, når et website gengiver brugerleveret input i HTML, JavaScript eller DOM uden korrekt escaping eller kontekstbevidst håndtering. Browseren kan ikke skelne mellem legitim kode og injiceret kode og eksekverer derfor angriberens payload som om den kom fra sitet selv.
Det er et klient-side angreb med server-side årsag.
Payload gemmes på serveren (fx kommentarer, profiler)
Rammer alle brugere, der ser indholdet
Høj impact
Payload sendes via request (fx querystring)
Eksekveres straks i svaret
Kræver ofte social engineering
Payload håndteres udelukkende i browseren
Ofte overset i klassiske audits
Opstår i JavaScript-logik
XSS er muligt, når:
Brugerinput ikke valideres eller escapes korrekt
Output kontekst ikke respekteres (HTML, JS, URL, CSS)
Frameworks omgås eller misbruges
Legacy templating eller manuel DOM-manipulation anvendes
Session hijacking
Cookie-tyveri
Account takeover
Keylogging og credential harvesting
Client-side malware
Brugertillid kompromitteres
Brand-skade
Potentielle databrud
Brud på databeskyttelse
Audit-fund og bøder
Kommentar- og feedbackfelter
Søgefelter
URL-parametre
CMS-indhold
Tredjeparts-widgets
HTML-escape i HTML-kontekst
JS-escape i JavaScript-kontekst
URL-encode i URL-kontekst
Undgå innerHTML
Brug templating med auto-escaping
Stol ikke på “trusted” input
Begræns script-kilder
Undgå unsafe-inline
Brug nonces eller hashes
HttpOnly
Secure
Begrænset scope
Input-validering alene
HTTPS
WAF som eneste forsvar
“Vi renser inputtet”
XSS forhindres ved korrekt output-håndtering.
XSS kompromitterer alle brugere, ikke kun én konto.
XSS opstår typisk, hvor man afviger fra framework-konventioner.
Jo mere dynamisk frontend, desto større risiko uden klare patterns.
Udfordring: Legacy templates
Løsning: Centraliser escaping og udfas manuel HTML-generering
Udfordring: Tredjeparts scripts
Løsning: CSP og sandboxing
Udfordring: SPA-kompleksitet
Løsning: Strict DOM-manipulation og reviews
Cross-Site Scripting er ikke et edge-case.
Det er et strukturelt problem.
Hvis data kan blive behandlet som kode, vil det ske.
Professionel XSS-beskyttelse kræver:
Klar adskillelse mellem data og kode
Kontekstbevidst escaping
CSP som sidste forsvarslinje