Hva er cross-site scripting?

En av de vanligste sårbarhetsklassene på nettsteder kalles "Cross-Site Scripting" eller "XSS". XSS-sårbarheter er hvor det er mulig for en bruker å få JavaScript til å bli utført. Det finnes en rekke forskjellige varianter av XSS-sårbarhet, med varierende alvorlighetsgrad.

Problemet med at en angriper kan kjøre JavaScript i øktene til andre brukere, er at det da er mulig for angriperen å gjøre hva som helst med nettsiden som ofrene ser. Dette inkluderer å omdirigere ofre til eksterne nettsteder, stjele autentiseringstokener og overvåke betalingsdetaljer.

Den mest alvorlige formen for XSS-sårbarhet er "Lagret" eller "Persistent" Cross-Site Scripting, det er her det er mulig for en angriper å lage en XSS-nyttelast og deretter sende den, slik at den lagres i databasen. Med en XSS-utnyttelse lagret i databasen er det da mulig for den å påvirke andre brukere over en lang tidsperiode.

En annen form for Cross-Site Scripting er "Reflected", denne typen lagres ikke på noe tidspunkt, i stedet er nyttelasten inkludert i nettleseren. Vanligvis er denne typen XSS en del av phishing-angrep, der en angriper prøver å lure et offer til å klikke på en ondsinnet lenke.

Generelt har de fleste XSS-angrep nyttelasten sendt til serveren på et tidspunkt, men noen angrep er det rent klientsiden, blir aldri sendt til serveren og i stedet bare påvirker klientsiden JavaScript. Dette kalles DOM-basert XSS ettersom det forblir i JavaScript Document Object Model, eller DOM. Denne typen sårbarhet er spesielt vanskelig å identifisere og løse fordi utnyttelsene aldri blir sett av serveren og kan derfor ikke logges.

Historisk sett er forebyggingsteknikken mot XSS-sårbarheter å filtrere alle brukerinnsendte data, ved å bruke blokkeringslister for å avvise meldinger med meningsfulle tegn eller ord i JavaScript. Dette førte til et våpenkappløp for å finne omkjøringsveier for filteret, samtidig som det forhindret noen legitime brukerinnsendinger. Den riktige løsningen er å bruke HTML-enheter for å kode brukerinnsendte data. med HTML-enhetsmoduler aktivert, kodes tegn automatisk til et format der nettleseren vet å vise dem som de riktige symbolene, men ikke behandle dem som kode.