Mikä on XSS (Cross-Site Scripting)?
Cross-Site Scripting eli XSS on verkkosivustojen tietoturva-aukko, joka mahdollistaa hyökkääjien lisätä haitallisia skriptejä verkkosivuille. Useimmiten nämä skriptit on kirjoitettu JavaScriptillä.
Jos joku vierailee XSS
kärsivällä sivulla, heidän selaimensa suorittaa hyökkääjän skriptin. Tämä voi johtaa varastettuihin evästeisiin, 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 -listalla yhtenä yleisimmistä web-sovellusten haavoittuvuuksista.

Kuinka XSS toimii?
XSS kohdistuu usein verkkosovelluksiin, jotka eivät tarkista ja puhdista käyttäjän syötteitä oikein.
Esimerkiksi, jos kommenttikenttä sallii raaka HTML
tai JavaScriptin ilman suodatusta, hyökkääjä voisi lisätä koodia kuten tämä:<script>alert('Hacked!');</script>
Kun uhrit katsovat sivua, haitallinen koodi suoritetaan heidän selaimessaan.
Miksi XSS on tärkeä kyberturvallisuudessa
XSS voi johtaa suurempaan tietomurtoon:
- Tilin kaappaus (istuntoevästeiden varastaminen käyttäjien esittämiseksi)
- Tietovarkaus (lomakesyötteiden, kuten salasanojen tai luottokorttien, kaappaaminen)
- Phishing-hyökkäykset (väärennettyjen kirjautumislomakkeiden injektointi)
- Haittaohjelmien jakelu (käyttäjien uudelleenohjaaminen haitallisille verkkosivustoille)
XSS tyypit
- DOM-pohjainen XSS
- Hyökkäys tapahtuu kokonaan selaimessa manipuloimalla Document Object Modelia (DOM) 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), ja skripti suoritetaan, kun uhri klikkaa hyökkääjien luomaa linkkiä.
Kuinka estää XSS
- Syötteen puhdistus ja tulosteen koodaus: aina puhdista käyttäjän syöttötiedot ennen niiden käsittelyä, muuntaen käyttäjän syötteet turvalliseen muotoon
- Käytä Content Security Policy (CSP): rajoittaa, mitä skriptiä voidaan suorittaa selaimessa.
- Vältä eval() ja sisäistä JavaScriptiä: vähentääksesi injektiouhkia.
- Turvatestaus (DAST/IAST): suorita turvatestaus havaitaksesi haavoittuvuudet aikaisessa vaiheessa
Esimerkki tosielämän tapauksesta - Samy-mato (MySpace, 2005)
Mitä tapahtui: Samy Kamkar julkaisi MySpace-profiilin, joka sisälsi tallennetun XSS-kuorman. Kun muut käyttäjät katsoivat profiilia, kuorma suoritettiin heidän selaimissaan, se (a) lisäsi Samyn ystäväksi, (b) lisäsi lauseen “Samy is my hero” 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 tunnin kuluessa, pakottaen MySpacen tilapäisesti offline-tilaan.
Miksi se toimi: MySpace salli pakkaamattoman HTML
/attribuuttien käytön profiilikentissä, mahdollistaen tallennetun skriptin suorittamisen vierailijoiden selaimissa.Oppitunnit / korjaus: Oikea ulostulon koodaus, syötteen puhdistus, HTML
poistaminen profiilikentistä ja nopea korjaaminen. Samy kohtasi myöhemmin oikeudellisia seurauksia, ja MySpace otti käyttöön suodattimet.Liittyvät termit
- SQL Injection
- DAST (Dynamic Application Security Testing)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)