Cross site scripting
Hva er xss?
Cross site scripting er en sårbarhet som er utbredt, lett og finne, og lett å utnytte. Angriperen trenger i mange tilfeller kun litt javascript skills for å utnytte denne type sårbarheter. Denne typen sårbarhet er heller ikke begrenset til kun et eller noen få programmeringsspråk siden det er en sårbarhet i selve webapplikasjonen og ikke programmeringsspråket som applikasjonen er skrevet i.
Cross site scripting er en type "injection attack" hvor uautorisert kode injeseres i applikasjonen. Koden som injeseres er som oftest javascript. Målet for denne typen angrep er ofte andre brukere av webapplikasjonen, noe som skiller xss fra andre typer angrep, f.eks "sql injection" hvor målet gjerne er databaseserveren.
Et eksempel angrep er at en angriper poster en kommentar i et forum. I tillegg til selve kommentaren postes det også ondsinnet javascript kode. Når andre brukere av forumet leser kommentaren vil samtidig den ondsinnede javascript koden kjøre i brukerens nettleser og angriperen har gjenomført et vellykket angrep.
Cross site scripting angrep brukes for å stjele brukersesjoner, skrive om nettsider (defacing), innsamling av brukernavn og passord med mer.
Forskjellige typer xss
Reflected XSS / Non-persistent XSS:
Refleted xss utnytter at en webapplikasjon tar imot input fra brukeren som i neste omgang blir behandlet og vist som output for andre brukere. Dersom webapplikasjonen ikke kontrollerer inndataene kan en angriper legge inn ondsinnet kode som så i neste omgang blir vist til andre som besøker den aktuelle siden. Disse intetanende besøkende vil da få den ondsinnete koden kjørt hos seg.
Stored XSS / Persistent XSS:
Stored xss er når angriperen greier å lagre den ondsinnete koden sin permanent på serveren. Den ondsinnete koden vil da bli vist til alle besøkende som kommer til den aktuelle siden. Profilsider og forum poster er typiske steder hvor en angriper vil legge inn ondsinnete script.
Stored xss er den mest alvorlige formen for xss siden den er lagret på server og vil fungere helt til angrepet blir oppdaget av en administrator som kan fjerne den ondsinnete koden fra databasen.
DOM XSS:
Dom XSS er når angriperen greier å endre dom-miljøet i offerets nettleser. DOM xss skiller seg fra de andre på den måten at angriperen ikke kommuniserer med serveren, men direkte med offerents nettleser. Tiltak mot denne typen XSS er litt annerledes en for de to andre variantene siden angrepet aldri når serveren vår, men baserer seg på at vi generer deler av websiden vår på klienten (javascript).
Tiltak mot XSS:
Den enkleste quickfixen mot xss er å kontrollere alle inndata fra brukeren. Se etter potensielt farlige tegn, html kode og lignende. Tillatt kun de inndataene du faktisk forventer, og dropp alt som ikke er forventet, såkallt whitelisting. Du kan også html-enkode tegnene istedetfor å vise de direkte.
Her er en tabell over noen av tegnene man skal være på utkikk etter:
Tegn | HTML-koden |
< | < |
> | > |
( | ( |
) | ) |
# | # |
& | & |
" | " |
' | ' |
I PHP kan du bruke htmlentities() funksjonen for å kode tegnene. For eksempel vil strengen "<script>" bli kodet til "<script>". Dette vil da bli vist som teksten "<script>" istedetfor at nettleseren tolker det som et script (og dermed utfører det).
Les mer om XSS
OWASP generelt om XSS: https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
OWASP xss prevention cheatsheet: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
Wikipedia: http://en.wikipedia.org/wiki/Cross-site_scripting