Lite+om+XSS

Cross site scripting (XSS)
XSS innebär att någon på något sätt injicerar kod (skriven i t.ex. JavaScript) som inte ursprungligen var tänkt att vara där i en webbsida/webbapplikation. Avikten med detta är ofta att den som injicerar koden skall komma åt data som inte skall vara åtkomliga för alla, t.ex. finanisiella data eller lösenord.

XSS-attacker görs ofta genom att extra HTTP query-parametrar läggs till i ett HTTP-anrop eller genom att skript anges i HTML-formulär.

Man kan klassificera XSS-attacker på några olika sätt. Ett sätt är att dela upp dem i icke-persistenta och persistenta. Ett annat sätt är att skilja på traditionella och DOM-baserade.

Icke-persistenta attacker
Icke-persistenta attacker kan användas när query-parametrar eller data angivit i formulär används direkt utan bearbetning i serverkod för att generera en webbsida.

Detta kan gå till så att en illvillig cracker skickar en länk till en viss webbplats på vilken det finns ett XSS-hål till någon obetänktig person. Webbplatsen skall vara en sådan som mottagaren bruka använda och logga in på. I den skickade länken är den skadliga koden tillagt som request-parametrar.

När mottagaren klickar på länken visas webbsidan som vanligt och mottagaren loggar därför in. Pga den skadliga koden kan nu känslig data, t.ex. sessions- ccokien, skickas till crackern.

Persistenta attacker
Persistenta attacker innebär att den skadliga koden sparas persistent på servern och därefter används för att generera sidor som skickas ut till andra användare. Detta är en mer allvarlig attack eftersom användare kan utsättas för den skadliga koden utan att crackern explicit behöver rikta en attack mot just dem.

DOM-baserade attacker
Om man delar upp XSS-attacker i traditionella och DOM-baserade tillhör de två typerna av attacker som just beskrivits den traditionella typen..

DOM-baserade attacker går ut på att attackera webbapplikationer som med AJAX använder DOM för att uppdatera hela eller delar av en sida. Detta kan göras t.ex. om applikationen använder data som den laddat från servern direkt utan validering för att generera ny HTML-kod på klienten.

Motmedel
Hur kan man då skydda sig mot XSS-attacker? Mot vissa attacker kan man skydda sig genom att leta efter speciella tecken i datat som laddas från servern eller som kommer in som parametrar och "escapa" eller filtrera bort dessa tecken. Detta gäller främst tecknen som man då kan ersätta med &lt; respektive &gt;.

Om man vill att användarna av en webbsida skall kunna mata in HTML-kod kan det vara bra att filtrera bort alla förekomster av eval, javascript och script. Detta för att inte någon körbar javascriptkod skall kunna injiceras.

En annan bra sak som kan hjälpa till att förbättra sin kod mot XSS-attacker kan vara att köra den genom JSLint (http://www.JSLint.com). JSLint är ett verktyg för att kolla kodkvalitet och leta efter vanliga fel i javascriptkod.

Referenser
http://weblogs.java.net/blog/2006/09/27/preventing-cross-site-scripting-attacks http://en.wikipedia.org/wiki/Cross-site_scripting