Uzbrukuma scenārijs
- Uzbrucējs atrod XSS ievainojamību upura izmantotajā tīmekļa vietnē, piemēram, bankas tīmekļa vietnē.
- Cietušais pašlaik ir pieteicies šajā lapā.
- Uzbrucējs nosūta upurim viltotu URL adresi.
- Upuris noklikšķina uz URL
- Par cietušā banka tīmekļa vietne, JavaScript kods sāk izpildīt, lai pārtvertu lietotāja dati vai veikt pārskaitījumu uzbrucēja vārdā uz uzbrucēja kontu.
Jāatzīmē, ka cietušā vārdā veiktās operācijas var būt cietušajam neredzamas, jo tās var notikt fonā, izmantojot bankas API, vai uzbrucējs tos var veikt vēlāk, izmantojot autentifikācijai nepieciešamos datus, žetonus, sīkfailus utt.
XSS veidi
1. Atspoguļots XSS
Atbildē tiek parādīts HTML/JavaScript kods, kas ietverts jebkurā parametrā (piemēram, GET, POST vai sīkfailā).
Lapa ar teksta ievadi, lai meklētu kaut ko, kas liek parametru ?search=foo URL galotnē, kad tiek veikta API vaicāšana. Pēc jebkuras frāzes ievadīšanas, ja tā nav atrasta, HTML formātā tiek ievietots atgriešanas ziņojums ex.
<div>Nav atrasts neviens rezultāts <b>foo</b></div>
Mēs varam mēģināt ievietot URL ?search=..
2.DOM XSS
Tas ir tad, ja tās izpilde ir iespējota, izmantojot bīstamas JavaScript funkcijas, piemēram. `eval` vai `innerHtml`. Tālāk dotajā “Tiešraides piemērā” ir parādīts DOM XSS uzbrukums, kura pamatā ir `innerHtml` funkcija.
3. Saglabāts XSS
Šajā gadījumā ļaunprātīgs kods tiek rakstīts servera pusē. Piemēram, mēs varam nosūtīt komentāru ar ļaunprātīgu kodu bloga ierakstam, kas ir augšupielādēts serverī. Tā uzdevums ir, piemēram, sagaidīt administratora moderēšanu un pēc tam nozagt viņa sesijas datus utt.
Injekcijas metodes
1. Birkas saturā
`onerror = brīdinājums('XSS')`uz
<img src onerror="alert('XSS')" />
2. Atribūta saturā
`" onmouseover=alert('XSS')` uz
<div class="" onmouseover="alert('XSS')""></div>
- Atribūta saturā bez pēdiņām
x onclick = brīdinājums('XSS')uz
<div class="x" onclick="alert('XSS')"></div>
- In the
hrefef atribūts
javascript:alert('XSS') uz
<a href="javascript:alert('XSS')"></a>
- JavaScript koda iekšpusē esošajā rindā
";alert('XSS')// uz
<script>let username="";alert('XSS')//";</script>
- Atribūtā ar JavaScript notikumu
');alert('XSS')// kur ' ir viena pēdiņa, uz
<div onclick="change('');alert('XSS')//')">Džons</div>
- In the
hrefatribūts JavaScript protokolā
);alert(1)// kur %27 ir viena pēdiņa, uz
<a href="javascript:change('%27);alert(1)//')">noklikšķiniet uz</a>
Tiešraides piemērs
Aizsardzības metodes
- Datu kodēšana, izmantojot iebūvētās funkcijas, kas atrodamas daudzos programmēšanas valodas.
- Šablonu sistēmu izmantošana ar automātisko kodēšanu. Lielākā daļa populāro karkasu, kas izmanto šādas sistēmas, aizsargā mums no XSS injekcijas (Django, veidnes, Vue, React utt.).
- Neizmantojiet tādas funkcijas kā
evalvaiFunkcijaar neuzticamiem lietotāja datiem. - Neizmantojiet funkcijas un īpašības, kas DOM koka elementiem tieši piešķir HTML kodu, piemēram,
innerHTML,outerHTML,insertAdjacentHTML,ocument.write. Tā vietā varat izmantot funkcijas, kas šiem elementiem tieši piešķir tekstu, piemēram.textContentvaiinnerText. - Esiet uzmanīgi, kad pāradresējat lietotāju uz URL, kas ir viņa kontrolē. Injekcijas risks
atrašanās vieta = 'javascript('XSS')'. - HTML filtrēšana, izmantojot tādas bibliotēkas kā
DOMPurify. - Esiet uzmanīgi ar augšupielādi
.htmlvai.svgfaili. Varat izveidot atsevišķu domēnu, no kura tiks apkalpoti augšupielādētie faili. - Izmantojiet
Satura drošības politikamehānisms. - Aplūkojiet populārākajās pārlūkprogrammās iebūvētos anti-XSS filtrus.
Ja šis raksts jums šķiet interesants, sekojiet Lukāšam Github vietnē: https://github.com/twistezo
Lasīt vairāk:
Datu iegūšanas stratēģijas NextJS