Yksi yleisimmistä verkkosivustojen haavoittuvuuksista on nimeltään "Cross-Site Scripting" tai "XSS". XSS-haavoittuvuuksissa käyttäjä voi aiheuttaa JavaScriptin suorittamisen. XSS-haavoittuvuudesta on useita eri muunnelmia, joiden vakavuusaste vaihtelee.
Ongelma, kun hyökkääjä pystyy suorittamaan JavaScriptiä muiden käyttäjien istunnoissa, on se, että hyökkääjä voi tehdä mitä tahansa uhrien näkemälle verkkosivustolle. Tämä sisältää uhrien uudelleenohjauksen ulkoisille verkkosivustoille, todennustunnusten varastamisen ja maksutietojen valvonnan.
XSS-haavoittuvuuden vakavin muoto on "tallennettu" tai "pysyvä" Cross-Site Scripting, tässä Hyökkääjä voi luoda XSS-hyötykuorman ja lähettää sen, jolloin se tallennetaan tietokantaan. Tietokantaan tallennetun XSS-hyödyntämisen avulla se voi sitten vaikuttaa muihin käyttäjiin laajalla ajanjaksolla.
Toinen Cross-Site Scripting -muoto on "Reflected", tätä tyyppiä ei tallenneta missään vaiheessa, vaan hyötykuorma sisällytetään selaimeen. Tyypillisesti tämäntyyppinen XSS on osa tietojenkalasteluhyökkäyksiä, joissa hyökkääjä yrittää huijata uhria napsauttamaan haitallista linkkiä.
Yleensä useimmissa XSS-hyökkäyksissä hyötykuorma lähetetään palvelimelle jossain vaiheessa, mutta jotkut hyökkäykset lähetetään puhtaasti asiakaspuolella, jota ei koskaan lähetetä palvelimelle, vaan se vaikuttaa vain asiakaspuolelle JavaScript. Tätä kutsutaan DOM-pohjaiseksi XSS: ksi, koska se pysyy JavaScript-dokumenttiobjektimallissa tai DOM: ssa. Tämän tyyppistä haavoittuvuutta on erityisen vaikea tunnistaa ja ratkaista, koska palvelin ei koskaan näe hyväksikäyttöjä, joten niitä ei voida kirjata.
Historiallisesti XSS-haavoittuvuuksien ehkäisytekniikka on suodattaa kaikki käyttäjien lähettämät tiedot estolistalla hylätäkseen kaikki merkityksellisiä merkkejä tai sanoja sisältävät viestit JavaScriptissä. Tämä johti kilpavarusteluun, jossa etsittiin suodattimen ohitusreittejä ja samalla estettiin jotkin lailliset käyttäjien kommentit. Oikea ratkaisu on käyttää HTML-kokonaisuuksia käyttäjien lähettämien tietojen koodaamiseen. Kun HTML-entiteettimoduulit ovat käytössä, merkit koodataan automaattisesti muotoon, jossa selain osaa näyttää ne oikeina symboleina, mutta ei käsittele niitä koodina.