Vad är Cross-Site Scripting (XSS)?

Cross-Site Scripting (XSS) är en extremt vanlig sårbarhet i webbapplikationer som tillåter en angripare att lägga in skadlig JavaScriptkod i en användares webbläsare. Angriparen kan leverera den skadliga koden på ett antal sätt. Ett sätt kan vara att lura dig att trycka på en länk (Reflected XSS) som i sin tur levererar koden, och ett annat att vänta tills du besöker en sida där angriparen redan lagt in den skadliga koden (Stored eller Persistent XSS).

Den där irriterande pop-up rutan med siffran 1 i? Det är bara ett sätt som folk visuellt bevisar att deras JavaScriptkod (XSS) har exekverats. Men låt inte den lura dig, det finns mycket mer en angripare kan göra med XSS!

Vad kan en hackare göra med XSS?

En hackare kan stjäla dina 'cookies' och logga in på webbapplikationen som om de vore du!

En hackare kan vidarebefordra din webbläsare till en infekterad hemsida utan att du märker det för att försöka lura dig till att ge ifrån dig känslig information som t.ex. bankuppgifter.

En hackare kan lägga in förfalskade loginformulär för att försöka lura dig till att ge ifrån dig inloggningsuppgifter.

En hackare kan till och med kringgå andra säkerhetsfunktioner som är inbyggda i din webbläsare.

Möjligheterna är i princip oändliga. Ta över din webbcam? Japp! Lyssna på din dators mikrofon? Absolut!

För ännu mer avancerade attacker, se verktyget The Browser Exploitation Framework (BeEF).

Vem har blivit hackad med hjälp av XSS?

The Apache Foundation, skaparna och underhållarna av en av de mest populära webbservrar på internet blev hackade via en XSS attack.

En XSS attack mot det officiella forumet för det linuxbaserade operativsystemet Ubuntu tillät angriparna att ladda ner användarnamn, e-mailadresser och lösenord för 1.82 miljoner användare.

XSS attacker riktas oftas in på en hemsidas användare och deras lokala nätverk, men som vi kan lära oss av exemplen ovan, så är webbapplikationen och även webbservern i riskzonen om användaren har administratörsrättigheter.

XSS sårbarheter hittas dagligen på sidor som Facebook, Yahoo, Google, Twitter och andra populära hemsidor av frilansande säkerhetsexperter som deltar i så kallade bug bounty program.

Här är en lista över andra attacker som använt XSS - https://www.google.com/fusiontables/DataSource?snapid=S1158702BBoV

Vad kan jag göra för att skydda mig mot XSS?

Se till att du håller din webbläsare uppdaterad och att du har alla säkerhetsfunktioner påslagna, så som Cross-Site Scripting (XSS) filtrering. Om din webbläsare inte har ett sådant filter, t.ex. Firefox, så kan du använda NoScript, ett XSS filter som plugin.

Var försiktig med vilka länkar du klickar på. En länk kan verka harmlös men i verkligheten innehålla skadlig XSS kod.

Använd logga ut funktionen på hemsidor när du är färdig, det gör det svårare för hackare att stjäla dina 'cookies'

Den tekniska biten! Vad kan jag göra för att skydda min webbapplikation mot XSS?

Cross-Site Scripting (XSS) sker när ickeverifierad input är utskriven på en sida utan att först bli saniterad och/eller enkoderad.

Om en användare skriver in sitt användarnamn för att logga in, och du då skriver ut det utan att sanitera och/eller enkodera, vad händer då om användarnamnet innehåller HTML/JavaScript kod? Webbläsaren kommer inte kunna skilja på användarnamnet och HTML koden från hemsidan. Data (användarnamnet) har blandats med kod (HTML)! Detta skulle kunna leda till att en användare loggar in med ett användarnamn som innehåller skadlig JavaScriptkod som körs inom kontextet av din webbapplikation.

Se till att du saniterar användarnamnet innan du använder det. Till exempel, om användare bara ska kunna ha alfanumeriska tecken i användarnamnet, se då till att det stämmer genom att sanitera input från användaren. Använd en whitelist! Jämför användarnamnet mot godkända tecken istället för ottillåtna.

Använd rätt encoding! Om användarnamnet ska användas inom HTML, använd då HTML encoding på användarnamnets tecken. På det sättet kan webbläsaren veta vad på webbsidan som är till för att renderas som HTML. Det finns inte bara HTML encoding dock! Du måste använda rätt encoding i rätt kontekt. Se länkarna nedan för mer information.

Scanna din webbapplikation för att hitta XSS sårbarheter. Det finns många automatiserade webbapplikations-scanners som kan hitta XSS sårbarheter i webbapplikationer. Du kan t.ex. testa Open Source scannern OWASP ZAP.

Se till att dina sessionscookies har flaggan HttpOnly. Det berättar för browsern att cookien inte ska användas av JavaScript, och därigenom hjälper webbläsaren att skydda dina användare.

Använd HTTP headern Content Security Policy (CSP). Den kan sättas av en webbapplikation för att berätta för webbläsaren vilka JavaScript som tillåts exekvering och varifrån. Den använder en whitelist!

För att avsluta, varför inte installera en brandvägg för webbapplikationer (Web Application Firewall, WAF), så som Open Source brandväggen mod_security! Ett WAF kommer ge din webbapplikation ett extra lager av skydd för att försvara mot många attacker, men borde inte användas som helhetsskydd eftersom att hackare titt som tätt hittar sätt att ta sig förbi brandväggarna.

Var kan jag hitta mer information?

De två typer av XSS som nämnts på denna sida (Reflected och Stored) är inte de enda! Vi har bara nuddat ytan av XSS världen. Vill du veta mer?

Open Web Application Security Project (OWASP) är en bra källa för allt som har att göra med webbapplikationssäkerhet. Kolla in deras wiki för XSS eller deras XSS Prevention Cheat Sheet. För information om andra typer av sårbarheter i webbapplikationer, ta en titt på den så kallade OWASP Top 10.

Tack för att du läste,
Ryan Dewhurst & Thomas MacKenzie

---

Syftet med denna sida är att hålla den simpel, kort, koncis och använda vanlig svenska.

Sidan är inspirerad av http://justinjackson.ca/words.html

---

Thanks to Mathias Karlsson for this translation. English version here.