Articles

XSS vs CSRF

I det här avsnittet förklarar vi skillnaderna mellan XSS och CSRF och diskuterar om CSRF-token kan hjälpa till att förhindra XSS-attacker.

Vad är skillnaden mellan XSS och CSRF?

Cross-site scripting (eller XSS) gör det möjligt för en angripare att köra godtycklig JavaScript i webbläsaren hos en offeranvändare.

Cross-site request forgery (eller CSRF) gör det möjligt för en angripare att få en offeranvändare att utföra åtgärder som de inte har för avsikt att göra.

Konsekvenserna av XSS-sårbarheter är i allmänhet allvarligare än för CSRF-sårbarheter:

  • CSRF gäller ofta endast en delmängd av de åtgärder som en användare kan utföra. Många program implementerar CSRF-skydd i allmänhet men förbiser en eller två åtgärder som lämnas utsatta. Omvänt kan en lyckad XSS-exploatering normalt få en användare att utföra alla åtgärder som användaren kan utföra, oavsett i vilken funktionalitet sårbarheten uppstår.
  • CSRF kan beskrivas som en ”enkelriktad” sårbarhet, eftersom en angripare visserligen kan förmå offret att utfärda en HTTP-förfrågan, men inte hämta svaret från denna förfrågan. XSS däremot är ”dubbelriktad”, eftersom angriparens injicerade skript kan utfärda godtyckliga förfrågningar, läsa svaren och exfiltrera data till en extern domän som angriparen väljer.

Kan CSRF-token förhindra XSS-attacker?

Vissa XSS-attacker kan faktiskt förhindras genom effektiv användning av CSRF-token. Tänk på en enkel reflekterad XSS-sårbarhet som kan utnyttjas på följande sätt:

https://insecure-website.com/status?message=<script>/*+Bad+stuff+here...+*/</script>

Anta att den sårbara funktionen innehåller en CSRF-token:

https://insecure-website.com/status?csrf-token=CIwNZNlR4XbisJF39I8yWnWX9wX4WFoz&message=<script>/*+Bad+stuff+here...+*/</script>

Om man antar att servern validerar CSRF-tokenet korrekt och avvisar förfrågningar utan giltigt token, förhindrar tokenet utnyttjandet av XSS-sårbarheten. Ledtråden här finns i namnet: ”cross-site scripting”, åtminstone i sin reflekterade form, innebär en förfrågan på olika platser. Genom att hindra en angripare från att förfalska en begäran över webbplatsen förhindrar programmet ett trivialt utnyttjande av XSS-sårbarheten.

Här uppstår några viktiga förbehåll:

  • Om en reflekterad XSS-sårbarhet finns någon annanstans på webbplatsen i en funktion som inte skyddas av en CSRF-token, kan den XSS-sårbarheten utnyttjas på normalt sätt.
  • Om en exploaterbar XSS-sårbarhet finns någonstans på en webbplats kan sårbarheten utnyttjas för att få en offeranvändare att utföra åtgärder även om åtgärderna i sig är skyddade av CSRF-token. I denna situation kan angriparens skript begära den relevanta sidan för att erhålla en giltig CSRF-token och sedan använda tokenet för att utföra den skyddade åtgärden.
  • CSRF-token skyddar inte mot lagrade XSS-sårbarheter. Om en sida som skyddas av en CSRF-token också är utgångspunkten för en lagrad XSS-sårbarhet kan den XSS-sårbarheten utnyttjas på vanligt sätt, och XSS-nyttolasten kommer att exekveras när en användare besöker sidan.