Hyökkäysskenaario
- Hyökkääjä löytää XSS-haavoittuvuuden uhrin käyttämältä verkkosivustolta, esimerkiksi pankin verkkosivustolta.
- Uhri on tällä hetkellä kirjautuneena tälle sivulle.
- Hyökkääjä lähettää uhrille väärennetyn URL-osoitteen.
- Uhri napsauttaa URL-osoitetta
- Uhrin pankki verkkosivusto, JavaScript koodi alkaa suorittaa siepatakseen käyttäjän tekemän tiedot tai tehdä hänen puolestaan siirto hyökkääjän tilille.
On syytä huomata, että uhrin puolesta suoritettavat operaatiot voivat olla uhrille näkymättömiä, sillä ne voivat tapahtua taustalla pankin pankkitunnuksilla. API, tai hyökkääjä voi suorittaa ne myöhemmin tunnistautumiseen tarvittavien tietojen, tunnisteiden, evästeiden jne. avulla.
XSS-tyypit
1. Heijastettu XSS
Tämä on sellainen, jossa minkä tahansa parametrin (esim. GET, POST tai eväste) sisältämä HTML/JavaScript-koodi näytetään vastauksena.
Sivu, jossa on tekstinsyöttö, jolla haetaan jotain, joka asettaa parametrin ?search=foo URL-osoitteen lopussa, kun API:ta kysytään. Jos jotain lausetta ei löydy, sen syöttämisen jälkeen annetaan palautusviesti HTML ex.
<div>Ei löytynyt tulosta <b>foo</b></div>
Voimme yrittää laittaa URL-osoitteen ?search=..
2.DOM XSS
Tämä tapahtuu silloin, kun sen suorittaminen mahdollistetaan käyttämällä vaarallisia toimintoja JavaScript:ssä, kuten seuraavia toimintoja `eval` tai `innerHtml`. Alla oleva "Live-esimerkki" näyttää DOM XSS -hyökkäyksen, joka perustuu `innerHtml` toiminto.
3. Tallennettu XSS
Tässä tapauksessa haittakoodi kirjoitetaan palvelinpuolelle. Voimme esimerkiksi lähettää haitallista koodia sisältävän kommentin blogikirjoitukseen, joka ladataan palvelimelle. Sen tehtävänä on esimerkiksi odottaa ylläpitäjän moderointia ja sitten varastaa hänen istuntotietonsa jne.
Injektiomenetelmät
1. Tagin sisällössä
`onerror=alert('XSS')`osoitteeseen
<img src onerror="alert('XSS')" />
2. Määritteen sisällössä
`" onmouseover=alert('XSS')`` osoitteeseen
<div class="" onmouseover="alert('XSS')""></div>
- Määritteen sisällössä ilman lainausmerkkejä
x onclick=alert('XSS')osoitteeseen
<div class="x" onclick="alert('XSS')"></div>
- Vuonna
hrefef-ominaisuus
javascript:alert('XSS') osoitteeseen
<a href="javascript:alert('XSS')"></a>
- JavaScript-koodin sisällä olevassa merkkijonossa
";alert('XSS')// osoitteeseen
<script>let username="";alert('XSS')//";</script>
- JavaScript-tapahtuman sisältämässä attribuutissa.
');alert('XSS')// jossa ' on yksittäinen lainausmerkki, ja
<div onclick="change('');alert('XSS')//')">John</div>
- Vuonna
hrefattribuutti JavaScript-protokollan sisällä
);alert(1)// jossa %27 on yksittäinen lainausmerkki, ja
<a href="javascript:change('%27);alert(1)//')">klikkaa</a>
Live-esimerkki
Puolustusmenetelmät
- Tiedon koodaus käyttämällä sisäänrakennettuja toimintoja, jotka löytyvät monista ohjelmointikielet.
- Mallijärjestelmien käyttö automaattisen koodauksen kanssa. Useimmat tällaisia järjestelmiä käyttävät suositut kehykset suojaavat us XSS-injektiolta (Django, Mallit, Vue, React jne.).
- Älä käytä funktioita kuten
evaltaiToimintoepäluotettavien käyttäjätietojen kanssa. - Älä käytä funktioita ja ominaisuuksia, jotka osoittavat HTML-koodia suoraan DOM-puun elementteihin, esim,
innerHTML,outerHTML,insertAdjacentHTML,ocument.write. Sen sijaan voit käyttää funktioita, jotka kohdistavat tekstiä suoraan näihin elementteihin, kuten esimerkiksi funktiotextContenttaiinnerText. - Ole varovainen, kun ohjaat käyttäjän URL-osoitteeseen, joka on hänen hallinnassaan. Injektioriski
location = 'javascript('XSS')'. - Suodata HTML:ää käyttämällä kirjastoja, kuten
DOMPurify. - Ole varovainen lataamisen suhteen
.htmltai.svgtiedostot. Voit luoda erillisen verkkotunnuksen, josta ladatut tiedostot toimitetaan. - Käytä
Content-Security-Policymekanismi. - Tutustu useimpiin suosittuihin selaimiin rakennettuihin XSS-suodattimiin.
Jos tämä artikkeli kiinnostaa sinua, seuraa Lukaszia Githubissa: https://github.com/twistezo
Lue lisää:
Tiedonhakustrategiat NextJS:ssä