Mis on saitidevaheline skriptimine?

Üks levinumaid haavatavuse klasse veebisaitidel on "saitideülene skriptimine" või "XSS". XSS-i haavatavused on kohad, kus kasutaja võib JavaScripti käivitada. XSS-i haavatavusel on mitu erineva raskusastmega varianti.

Probleem selles, et ründaja suudab teiste kasutajate seanssides JavaScripti käivitada, seisneb selles, et ründajal on siis võimalik ohvritele nähtavale veebisaidile midagi ette võtta. See hõlmab ohvrite ümbersuunamist välistele veebisaitidele, autentimislubade varastamist ja maksete üksikasjade jälgimist.

XSS-i haavatavuse kõige raskem vorm on "salvestatud" või "püsiv" saidiülene skriptimine, see on koht, kus ründajal on võimalik koostada XSS-i kasulik koormus ja see seejärel esitada, nii et see salvestatakse andmebaasi. Andmebaasi salvestatud XSS-i kasutamine võib seejärel mõjutada teisi kasutajaid pikema aja jooksul.

Teine saidiülese skriptimise vorm on "Reflected", seda tüüpi ei salvestata ühelgi hetkel, selle asemel lisatakse kasulik koormus brauserisse. Tavaliselt on seda tüüpi XSS osa andmepüügirünnakutest, kus ründaja üritab ohvrit meelitada pahatahtlikule lingile klõpsama.

Üldjuhul saadetakse enamiku XSS-i rünnakute kasulik koormus mingil hetkel serverisse, kuid mõned rünnakud seda ka tehakse puhtalt kliendipoolne, mida ei saadeta kunagi serverisse ja see mõjutab ainult kliendi poolt JavaScript. Seda nimetatakse DOM-põhiseks XSS-iks, kuna see jääb JavaScripti dokumendiobjekti mudelisse ehk DOM-i. Seda tüüpi haavatavust on eriti raske tuvastada ja kõrvaldada, kuna server ei näe kunagi ärakasutusi ja seetõttu ei saa neid logida.

Ajalooliselt on XSS-i haavatavuste vältimise tehnikaks kõigi kasutajate esitatud andmete filtreerimine, kasutades blokeerimisloendeid, et lükata tagasi kõik JavaScriptis tähenduslike märkide või sõnadega sõnumid. See kippus viima võidurelvastumiseni filtrist möödaviikude leidmisel, takistades samal ajal ka mõningaid õigustatud kasutajate esildisi. Õige lahendus on HTML-i olemite kasutamine kasutaja esitatud andmete kodeerimiseks. Kui HTML-üksuste moodulid on lubatud, kodeeritakse märgid automaatselt vormingusse, kus brauser teab neid õigete sümbolitena kuvada, kuid mitte koodina käsitleda.