(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); thecodest, autor aadressil The Codest - Page 10 of 13

Rünnaku stsenaarium

  1. Ründaja leiab XSS-haavatavuse ohvri kasutataval veebisaidil, nt panga veebisaidil.
  2. Ohver on praegu sellele leheküljele sisse logitud
  3. Ründaja saadab ohvrile võltsitud URL-i.
  4. Ohver klõpsab URL-i
  5. 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>

  1. Atribuudi sisu ilma jutumärkideta

x onclick=alert('XSS')aadressile

<div class="x" onclick="alert('XSS')"></div>

  1. In the hrefef atribuut

javascript:alert('XSS') aadressile

<a href="javascript:alert('XSS')"></a>

  1. JavaScript koodis sisalduvas stringis

";alert('XSS')// aadressile

<script>let username="";alert('XSS')//";</script>
  1. Atribuudis koos sündmusega JavaScript

');alert('XSS')// kus ' on ühekordne jutumärk, arvesse

<div onclick="change('&#39;);alert('XSS')//')">John</div>

  1. In the href atribuut 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

  1. Andmete kodeerimine, kasutades sisseehitatud funktsioone, mis leidub paljudes programmeerimiskeeled.
  2. Automaatse kodeerimisega šabloonisüsteemide kasutamine. Enamik selliseid süsteeme kasutavaid populaarseid raamistikke kaitseb us XSS süstimise eest (Django, Mallid, Vue, React jne).
  3. Ärge kasutage selliseid funktsioone nagu eval või Funktsioon ebausaldusväärsete kasutajaandmetega.
  4. Ä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.
  5. Olge ettevaatlik, kui suunate kasutaja ümber URL-i, mis on tema kontrolli all. Süstimise oht location = 'javascript('XSS')'.
  6. Filtreerida HTML-i kasutades selliseid raamatukogusid nagu DOMPurify.
  7. Olge ettevaatlik üleslaadimise suhtes .html või .svg failid. Saate luua eraldi domeeni, kust üleslaetud faile serveeritakse.
  8. Kasutage Sisu-turvalisuse poliitika mehhanism.
  9. 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

Rails API ja CORS. Riputus teadvusest

Miks peaksite (tõenäoliselt) kasutama Typescripti?

etEstonian