Hvad er cross-site scripting?

En af de mest almindelige klasser af sårbarhed på websteder kaldes "Cross-Site Scripting" eller "XSS". XSS-sårbarheder er, hvor det er muligt for en bruger at få JavaScript til at blive eksekveret. Der findes en række forskellige varianter af XSS-sårbarhed, med varierende sværhedsgrad.

Problemet med, at en angriber kan udføre JavaScript i andre brugeres sessioner, er, at det så er muligt for angriberen at gøre hvad som helst ved det websted, som ofrene ser. Dette omfatter omdirigering af ofre til eksterne websteder, stjæle autentificeringstokens og overvågning af betalingsoplysninger.

Den mest alvorlige form for XSS-sårbarhed er "Stored" eller "Persistent" Cross-Site Scripting, det er her det er muligt for en angriber at lave en XSS-nyttelast og derefter sende den, så den gemmes i databasen. Med en XSS-udnyttelse gemt i databasen er det så muligt for den at påvirke andre brugere over en lang periode.

En anden form for Cross-Site Scripting er "Reflected", denne type gemmes ikke på noget tidspunkt, i stedet er nyttelasten inkluderet i browseren. Typisk er denne type XSS en del af phishing-angreb, hvor en angriber forsøger at narre et offer til at klikke på et ondsindet link.

Generelt har de fleste XSS-angreb nyttelasten sendt til serveren på et tidspunkt, men nogle angreb er det rent klient-side, bliver aldrig sendt til serveren og i stedet kun påvirker klient-side JavaScript. Dette kaldes DOM-baseret XSS, da det forbliver i JavaScript Document Object Model, eller DOM. Denne type sårbarhed er særlig svær at identificere og løse, fordi udnyttelserne aldrig ses af serveren og derfor ikke kan logges.

Historisk set er forebyggelsesteknikken mod XSS-sårbarheder at filtrere alle brugerindsendte data ved at bruge blokeringslister til at afvise meddelelser med meningsfulde tegn eller ord i JavaScript. Dette havde en tendens til at føre til et våbenkapløb om at finde omgåelser til filteret, samtidig med at det forhindrede nogle legitime brugerindsendelser. Den korrekte løsning er at bruge HTML-enheder til at kode brugerindsendte data. med HTML-entitetsmoduler aktiveret, kodes tegn automatisk til et format, hvor browseren ved at vise dem som de korrekte symboler, men ikke behandle dem som kode.