Saitidevaheline skriptimine (XSS) on teatud tüüpi turbekasutus, mis võimaldab ründajatel sisestada veebisaitidele kliendikoodi abil pahatahtlikke skripte. See kujutab endast märkimisväärset ohtu, kuna ründajad saavad seda kasutada kasutajate esinemiseks, tundlikele andmetele juurdepääsu saamiseks või isegi veebisaidi lehe sisu muutmiseks.

See on nii ohtlik, et 2021. aastal oli see tavaliste nõrkuste loendis 25 kõige ohtlikuma nõrkuse edetabelis teisel kohal. See tähendab, et kui loote veebisaite, peate teadma saidiülese skriptimise ja selle vältimise kohta.

Kuidas saitidevaheline skriptimine töötab?

Enne saidiülese skriptimise toimimise mõistmist on oluline teada, mida tähendab sama päritoluga poliitika (SOP). SOP on turvamehhanismi poliitika, mis piirab veebisaidi (üks päritolu) lugemist või kirjutamist teisele veebisaidile (teine ​​päritolu). See takistab pahatahtlikel veebisaitidel pahatahtlikku koodi saatmast usaldusväärsetele veebisaitidele.

Saidiülesed skriptirünnakud püüavad sellest reeglist mööda minna, kasutades ära brauseri suutmatust teha vahet seadusliku HTML-i ja pahatahtliku koodi vahel. Näiteks võib ründaja sisestada sihtveebisaidile JavaScripti koodi. Oletame, et brauser käivitab koodi ja ründaja saab juurdepääsu seansimärkidele, küpsistele ja muudele tundlikele andmetele.

On kolme tüüpi saidiülene skriptimine, mida häkkerid kasutavad veebisaitide purustamiseks: peegeldunud, salvestatud ja DOM XSS.

Kuidas vältida saidiülest skriptimist sõlmes

Järgmised on mõned sammud, mida saate teha, et vältida saidiülese skriptimist Node'is.

Puhastage sisend

Ründajad peavad XSS-i rünnaku sooritamiseks saama andmeid teie veebirakendusse saata ja kasutajale kuvada. Seetõttu on esimene ennetav meede desinfitseerida kogu sisend, mille teie rakendus oma kasutajatelt saab. See on ülioluline, kuna see tuvastab võltsandmed enne, kui server selle käivitab. Saate seda teha käsitsi või kasutada mõnda muud tööriista validaator mis muudab protsessi kiiremaks.

Näiteks võite kasutada validaator HTML-märgendite eest põgenemiseks kasutaja sisendis, nagu allpool.

importida validaator alates "validaator";
let userInput = `Jane <skripti laadimine="hoiatus ('XSS-i häkkimine');"></script>`;
lase sanitizedInput = validator.escape (userInput);

Kui peaksite ülaltoodud koodi käivitama, oleks desinfitseeritud väljund järgmine.

Jane &lt; skripti laadimine=&quot; hoiatus (&#x27;XSS-i häkkimine&#x27;);&quot;&gt;&lt;&#x2F; stsenaarium&gt;

Kasutaja sisestuse piiramine

Piirake sisendi tüüpi, mida kasutaja saab teie vormis kinnitamise kaudu esitada. Näiteks kui teil on meili jaoks sisestusväli, lubage sisestamine ainult meilivormingus. Nii vähendate võimalust, et ründajad esitavad halbu andmeid. Selleks saate kasutada ka validaatori paketti.

Rakendage ainult HTTP-küpsisepoliitikat

Küpsised salvestavad andmeid kohalikku vahemällu ja saatke see HTTP kaudu serverisse tagasi. Kuid ründajad saavad neile brauseri kaudu juurde pääsemiseks kasutada ka JavaScripti, nii et nad on lihtsad sihtmärgid.

Ainult HTTP-küpsis on poliitika, mis takistab kliendipoolsetel skriptidel juurdepääsu küpsiseandmetele. See tähendab, et isegi kui teie rakendus sisaldab haavatavust ja ründaja kasutab seda ära, ei pääse nad küpsisele juurde.

Siin on näide selle kohta, kuidas saate Expressi abil Node.js-is rakendada ainult HTTP-küpsiste poliitikat.

rakendus.kasutage(väljendada.seanss({
saladus: "saladus",
küpsis: {
Ainult http: tõsi,
turvaline: tõsi
}
}))

Kui ründaja üritas küpsisele juurde pääseda Ainult http seatud tõeseks, nagu ülal näidatud, saavad nad tühja stringi.

Saididevaheline skriptimine on häkkerite jaoks lihtne sihtmärk

Kuigi teie rakenduse turvalisuse tagamine on ülioluline, võib selle rakendamine muutuda keeruliseks. Sellest postitusest õppisite saidiüleste skriptirünnakute kohta ja kuidas saate neid Node'is ära hoida. Kuna ründajad kasutavad teie serverisse pahatahtliku koodi sisestamiseks ära teie rakenduse turvaauke, veenduge alati, et te puhastate kasutaja sisendi. Seda tehes eemaldate pahatahtliku koodi enne, kui teie rakendus selle salvestab või käivitab.