XSS-rünnakud võimaldavad ründajatel sisestada kliendipoolseid skripte teiste kasutajate poolt vaadatavatele veebilehtedele. Selle haavatavuse peamised tagajärjed on võimalus teostada mis tahes tegevusi sisselogitud kasutaja kontekstis ja lugeda mis tahes andmeid sisselogitud kasutaja kontekstis.
Rünnaku stsenaarium
Ründaja leiab XSS-haavatavuse ohvri kasutataval veebisaidil, nt panga veebisaidil.
Ohver on praegu sellele leheküljele sisse logitud
Ründaja saadab ohvrile võltsitud URL-i.
Ohver klõpsab URL-i
Ohvri kohta pank veebisait, JavaScriptkood hakkab täitma kasutaja andmete pealtkuulamist või tema nimel ülekande sooritamist ründaja kontole.
Tasub märkida, et ohvri nimel tehtavad operatsioonid võivad olla ohvrile nähtamatud, kuna need võivad toimuda taustal panga API abil või ründaja võib neid hiljem teha autentimiseks vajalike andmete, märkide, küpsiste jne abil.
XSS tüübid
1. Peegeldatud XSS
See on selline, kus vastuseks kuvatakse mis tahes parameetris (nt GET, POST või küpsis) sisalduv HTML/JavaScript-kood.
Lehekülg tekstisisendiga, et otsida midagi, mis paneb parameetriks ?search=foo URL-i lõpus API päringu tegemisel. Pärast mis tahes fraasi sisestamist, kui seda ei leita, pannakse tagastussõnum HTML ex.
<div>Ei leitud tulemusi seoses <b>foo</b></div>
Me võime proovida panna URL-i ?search=..
2.DOM XSS
See on siis, kui selle täitmine on lubatud JavaScript ohtlike funktsioonide kasutamisega, näiteks `eval` või `innerHtml`. Allpool olev "Live näide" näitab DOM XSS rünnakut, mis põhineb `innerHtml` funktsioon.
3. Salvestatud XSS
See on üks neist, kus pahatahtlik kood kirjutatakse serveri poolele. Näiteks võime saata pahatahtliku koodiga kommentaari blogipostitusele, mis laaditakse serverisse. Selle ülesanne on näiteks oodata administraatori modereerimist ja seejärel varastada tema seansiandmed jne.
Andmete kodeerimine, kasutades sisseehitatud funktsioone, mis leidub paljudes programmeerimiskeeled.
Automaatse kodeerimisega šabloonisüsteemide kasutamine. Enamik populaarseid raamistikke, mis kasutavad selliseid süsteeme, kaitsevad meid XSS-i süstimise eest (Django, Templates, Vue, React jne).
Ärge kasutage selliseid funktsioone nagu eval või Funktsioon ebausaldusväärsete kasutajaandmetega.
Ärge kasutage funktsioone ja omadusi, mis omistavad HTML-koodi otse DOM-puu elementidele, nt, innerHTML, outerHTML, insertAdjacentHTML, ocument.write. Selle asemel võite kasutada funktsioone, mis määravad teksti otse nendele elementidele, näiteks textContent või innerText.
Olge ettevaatlik, kui suunate kasutaja ümber URL-i, mis on tema kontrolli all. Süstimise oht location = 'javascript('XSS')'.
Filtreerida HTML-i kasutades selliseid raamatukogusid nagu DOMPurify.
Olge ettevaatlik üleslaadimise suhtes .html või .svg failid. Saate luua eraldi domeeni, kust üleslaetud faile serveeritakse.
Kasutage Sisu-turvalisuse poliitika mehhanism.
Vaadake enamikus populaarsetes brauserites sisseehitatud XSS-vastaseid filtreid.
Kui see artikkel tundub teile huvitav, jälgige Lukasz'i Githubis: https://github.com/twistezo