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, JavaScript kood alustab täitmist, et peatada kasutaja andmed või teha tema nimel ülekanne ründaja kontole
Tuleb märkida, et ohvri nimel tehtavad toimingud võivad olla ohvrile nähtamatud, kuna need võivad toimuda taustal, kasutades panga API, või ründaja võib neid hiljem teostada 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.
Süstimismeetodid
1. Sildi sisu
`onerror=alert('XSS')`aadressile
<img src onerror="alert('XSS')" />
2. Atribuudi sisu
`" onmouseover=alert('XSS')`" onmouseover=alert('XSS')` aadressile
<div class="" onmouseover="alert('XSS')""></div>
- Atribuudi sisu ilma jutumärkideta
x onclick=alert('XSS')aadressile
<div class="x" onclick="alert('XSS')"></div>
- In the
hrefef atribuut
javascript:alert('XSS') aadressile
<a href="javascript:alert('XSS')"></a>
- JavaScript koodis sisalduvas stringis
";alert('XSS')// aadressile
<script>let username="";alert('XSS')//";</script>
- Atribuudis koos sündmusega JavaScript
');alert('XSS')// kus ' on ühekordne jutumärk, arvesse
<div onclick="change('');alert('XSS')//')">John</div>
- In the
hrefatribuut JavaScript protokolli sees
);alert(1)// kus %27 on ühekordne jutumärk, arvesse
<a href="javascript:change('%27);alert(1)//')">kliki</a>
Elus näide
Kaitsemeetodid
- Andmete kodeerimine, kasutades sisseehitatud funktsioone, mis leidub paljudes programmeerimiskeeled.
- Automaatse kodeerimisega šabloonisüsteemide kasutamine. Enamik selliseid süsteeme kasutavaid populaarseid raamistikke kaitseb us XSS süstimise eest (Django, Mallid, Vue, React jne).
- Ärge kasutage selliseid funktsioone nagu
evalvõiFunktsioonebausaldusvää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äitekstextContentvõiinnerText. - 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
.htmlvõi.svgfailid. Saate luua eraldi domeeni, kust üleslaetud faile serveeritakse. - Kasutage
Sisu-turvalisuse poliitikamehhanism. - Vaadake enamikus populaarsetes brauserites sisseehitatud XSS-vastaseid filtreid.
Kui see artikkel tundub teile huvitav, jälgige Lukasz'i Githubis: https://github.com/twistezo
Loe edasi:
NextJS-i andmete hankimise strateegiad