Mikä on XSS (Cross-Site Scripting)?
Cross-Site Scripting eli XSS on verkkosivustojen tietoturvahaavoittuvuus, joka mahdollistaa hyökkääjien haitallisten skriptien lisäämisen verkkosivuille. Useimmiten nämä skriptit kirjoitetaan JavaScriptillä.
Jos joku vierailee XSS:stä kärsivällä sivulla, hänen selaimensa suorittaa hyökkääjän skriptin. Tämä voi johtaa evästeiden varastamiseen, kaapattuihin istuntoihin tai toimiin, jotka tehdään ilman käyttäjän lupaa.
XSS, kuten SQL Injection, on säännöllisesti listattu OWASP Top 10:ssä yhtenä yleisimmistä verkkosovellusten haavoittuvuuksista.

Kuinka XSS toimii?
XSS kohdistuu usein verkkosovelluksiin, jotka eivät tarkista ja puhdista käyttäjän syötteitä oikein.
Esimerkiksi, jos kommenttilaatikko sallii raaka HTML:n tai JavaScriptin ilman mitään suodatusta, hyökkääjä voisi lisätä koodin kuten:
<script>alert('Hakkeroitu!');</script>
Kun uhrit katsovat sivua, haitallinen koodi suoritetaan heidän selaimessaan.
Miksi XSS on tärkeä kyberturvallisuudessa
XSS voi johtaa suurempaan tietomurtoon :
- Tilin kaappaus (istuntokeksien varastaminen käyttäjien teeskentelyyn)
- Tietovarkaus (lomakekenttien, kuten salasanojen tai luottokorttien, kaappaaminen)
- Kalasteluhyökkäykset (väärennettyjen kirjautumislomakkeiden injektointi)
- Haittaohjelmien toimitus (käyttäjien ohjaaminen haitallisille verkkosivustoille)
XSS-tyypit
- DOM-pohjainen XSS
- Hyökkäys tapahtuu kokonaan selaimessa manipuloimalla Document Object Model (DOM) -rakennetta ilman palvelimen osallistumista.
- Tallennettu XSS
- Haitallinen skripti tallennetaan pysyvästi palvelimelle, kuten tietokantaan tai profiilisivulle.
- Heijastettu XSS
- Skripti heijastuu verkkopalvelimelta (esim. URL-osoitteessa tai virheilmoituksessa), skripti suoritetaan, kun uhri napsauttaa hyökkääjien luomaa linkkiä.
Kuinka estää XSS
- Syötteen puhdistus ja tulosteen koodaus: aina käyttäjän syötteen puhdistaminen ennen sen käsittelyä, käyttäjän syötteen muuntaminen turvalliseen muotoon
- Käytä Content Security Policy (CSP): rajoittaa, mitä skriptiä voidaan suorittaa selaimessa.
- Vältä eval()- ja sisäistä JavaScriptiä: vähentääksesi injektioriskejä.
- Turvatestaus (DAST/IAST): suorita turvatestausta haavoittuvuuksien havaitsemiseksi aikaisin
Esimerkki todellisesta maailmasta - Samy-mato (MySpace, 2005)
Mitä tapahtui: Samy Kamkar julkaisi MySpace-profiilin, joka sisälsi tallennetun XSS-hyökkäyskoodin. Kun muut käyttäjät katsoivat profiilia, hyökkäyskoodi suoritettiin heidän selaimissaan, se (a) lisäsi Samyn ystäväksi, (b) lisäsi lauseen “Samy on sankarini” heidän profiileihinsa ja (c) kopioi itsensä näiden käyttäjien profiilisivuille.
Vaikutus: Mato levisi itsestään ~1 miljoonalle käyttäjälle noin 20 tunnissa, pakottaen MySpacen tilapäisesti offline-tilaan.
Miksi se toimi: MySpace salli pakkaamattoman HTML:n/attribuuttien käytön profiilikentissä, mikä mahdollisti tallennetun skriptin suorittamisen vierailijoiden selaimissa.
Opit / korjaus: Asianmukainen tulosteen koodaus, syötteen puhdistus, HTML:n poistaminen profiilikentistä ja nopea korjaaminen. Samy kohtasi myöhemmin oikeudellisia seuraamuksia, ja MySpace otti käyttöön suodattimia.
Liittyvät termit
- SQL Injection
- DAST (Dynamic Application Security Testing)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)