cross site scripting attack tutorial with examples
Cjelovit vodič za napad na više lokacija (XSS), kako to spriječiti i XSS testiranje.
Cross Site Scripting (XSS) jedan je od najpopularnijih i najranjivijih napada kojeg poznaje svaki napredni tester. Smatra se jednim od najrizičnijih napada za web aplikacije, a može donijeti i štetne posljedice.
XSS se često uspoređuje sa sličnim napadima na strani klijenta, jer se tijekom ovog napada uglavnom koriste jezici na strani klijenta. Međutim, XSS napad se smatra rizičnijim, jer može oštetiti još manje ranjive tehnologije.
U ovom vodiču za XSS napade dat ćemo vam cjelovit pregled njegovih vrsta, alata i preventivnih mjera sa savršenim primjerima u jednostavnim uvjetima za vaše lako razumijevanje.
Što ćete naučiti:
- Uvod u XSS Attack
- Kako se izvodi XSS?
- Vrste napada na skriptiranje na više lokacija
- Kako testirati protiv XSS-a?
- XSS alati za testiranje
- Usporedba s drugim napadima
- Načini sprječavanja XSS-a
- Prevencija prema tehnologijama
- XSS varalice
- Zaključak
- Preporučena literatura
Uvod u XSS Attack
Cross Site Scripting napad je ubrizgavanje zlonamjernog koda, koje će se izvršiti u žrtvinom pregledniku. Zlonamjerna skripta može se spremiti na web poslužitelj i izvršiti svaki put kad korisnik pozove odgovarajuću funkcionalnost. Može se izvesti i drugim metodama - bez spremanja skripte na web poslužitelju.
Glavna svrha ovog napada je krađa identitetnih podataka drugog korisnika - kolačića, tokena sesije i ostalih podataka. U većini slučajeva ovaj se napad koristi za krađu kolačića druge osobe. Kao što znamo, kolačići nam pomažu da se automatski prijavimo. Stoga se s ukradenim kolačićima možemo prijaviti s drugim identitetima. I to je jedan od razloga zašto se ovaj napad smatra jednim od najrizičnijih napada.
XSS napad izvodi se na strani klijenta. Može se izvesti s različitim programskim jezicima na strani klijenta. Međutim, najčešće se ovaj napad izvodi pomoću Javascripta i HTML-a.
Preporučeno čitanje=> Vodič za HTML injekcije
Kako se izvodi XSS?
Cross Site Scripting napad znači slanje i ubrizgavanje zlonamjernog koda ili skripte. Zlonamjerni kod obično se piše s klijentskim programskim jezicima kao što su Javascript, HTML, VBScript , Flash itd. Međutim, Javascript i HTML uglavnom se koriste za izvođenje ovog napada.
Ovaj se napad može izvesti na različite načine. Ovisno o vrsti XSS napada, zlonamjerna skripta može se odraziti na žrtvinom pregledniku ili pohraniti u bazu podataka i izvršiti svaki put kada korisnik pozove odgovarajuću funkciju.
Glavni razlog ovog napada je neprimjerena provjera korisničkog unosa, gdje zlonamjerni unos može ući u izlaz. Zlonamjerni korisnik može unijeti skriptu koja će se ubrizgati u kôd web stranice. Tada preglednik ne može znati je li izvršeni kod zlonamjeran ili nije.
Stoga se zlonamjerna skripta izvršava u žrtvinom pregledniku ili se za korisnike prikazuje bilo koji lažni obrazac. Postoji nekoliko oblika u kojima se može dogoditi XSS napad.
Glavni oblici skriptiranja na više lokacija su kako slijedi:
- Cross Site Scripting može se dogoditi na zlonamjernoj skripti koja se izvršava na klijentskoj strani.
- Lažna stranica ili obrazac koji se prikazuju korisniku (gdje žrtva upisuje vjerodajnice ili klikne zlonamjernu vezu).
- Na web stranicama s prikazanim oglasima.
- Zlonamjerne e-poruke poslane žrtvi.
Do ovog napada dolazi kada zlonamjerni korisnik pronađe ranjive dijelove web stranice i pošalje ih kao odgovarajući zlonamjerni unos. Zlonamjerna skripta ubrizgava se u kôd i zatim šalje kao izlaz krajnjem korisniku.
Analizirajmo jednostavan primjer: Uzmimo u obzir da imamo web stranicu s poljem za pretraživanje.
Ako je polje za pretraživanje ranjivo, kada korisnik unese bilo koju skriptu, tada će se izvršiti.
Uzmite u obzir da korisnik unosi vrlo jednostavnu skriptu kao što je prikazano u nastavku:
alert(‘XSS’)
Zatim nakon klika na 'Traži' gumb, izvršit će se unesena skripta.
Kao što vidimo u Primjer ,izvršava se skripta upisana u polje za pretraživanje. Ovo samo pokazuje ranjivost XSS napada. Međutim, može se upisati i štetnija skripta.
Mnogi testeri miješaju Cross Site Scripting napad sa Javascript ubrizgavanje , koja se izvodi i na strani klijenta. U oba se ubacuje zlonamjerna skripta. Međutim, u slučaju XSS napada oznake nisu potrebne za izvršavanje skripte.
Na primjer :
;
Također, to može biti skripta koja se izvršava na drugom događaju.
Na primjer:Na lebdenje miša.
Analizirajmo još jedan primjer:Uzmimo u obzir da imamo stranicu na kojoj se na web mjestu prikazuje najnovija recenzija knjige.
Kôd ove stranice izgledat će kako je prikazano u nastavku:
print '' print '. If this vulnerability is present in the web application, an indicated text will be inserted intags. Trying to pass some code through HTTP request as this is also a method to check if this attack is possible.
Generally, while testing for possible XSS attack, input validation should be checked and the tester should be conscious while checking the website’s output. Also if a code review is being performed, it is important to find how input can get into the output.
XSS Testing Tools
As Cross Site Scripting attack is one of the most popular risky attacks, there are a plenty of tools to test it automatically. We can find various scanners to check for possible XSS attack vulnerabilities – like, Nesus and Nikto. Both of which are considered as quite reliable.
From my software testing career, I would like to mention SOAP UI tool. SOAP UI can be considered as a quite strong tool for checking against the possible XSS attacks. It contains ready templates for checking against this attack. It really simplifies the testing process.
However, in order to test for this vulnerability with SOAP UI tool, API level testing should already be automated with that tool. Another solution to test against XSS can be browser plugins. However, plugins are considered as quite a weak tool to check against this type of attack.
Even while testing automatically, the tester should have good knowledge of this attack type and should be able to analyze the results appropriately.
Good knowledge is also helpful while selecting the testing tool. Also, it is important to know, that while performing scanning for security vulnerabilities with an automatic tool, testing manually is also a good practice and this way the tester will be able to see the results and analyze them.
Recommended Tool:
#1) Kiuwan

Find and fix vulnerabilities in your code at every stage of the SDLC.
Kiuwan is compliant with the most stringent security standards including OWASP, CWE, SANS 25, HIPPA, and more. Integrate Kiuwan in your IDE for instant feedback during development.
Kiuwan supports all major programming languages and integrates with leading DevOps tools.
=> Scan your code for free
Comparison with Other Attacks
XSS is considered to be one of the riskiest attacks, as its main purpose is to steal the website’s or system’s user identities. Also, XSS attack can be performed with different client-side languages like Javascript, HTML, VBScript, Flash, etc. And this makes it more harmful and widespread than the other possible attacks.
Testing for XSS attack is quite similar to testing for the other possible client-side attacks. However, it is important to remember what additional cases should be checked while testing for XSS.
Another thing, that makes this attack riskier is the possibility to be stored in the web service – this way it can affect many users for a longer period of time. XSS sometimes can be performed to even less vulnerable systems and its vulnerabilities are sometimes difficult to be found.
Also, while comparing with the other attacks, XSS has many ways to be performed and affect the website as well.
Ways to Prevent XSS
Though this type of attack is considered to be one of the most dangerous and risky one, still a preventing plan should be prepared. Because of the popularity of this attack, there are quite many ways to prevent it.
Commonly used main prevention methods include:
- Data validation
- Filtering
- Escaping
The first step in the prevention of this attack is Input validation . Everything, that is entered by the user should be precisely validated, because the user’s input may find its way to the output. Data validation can be named as the basis for ensuring the system’s security. I would remind, that the idea of validation is not to allow inappropriate input.
Therefore it just helps to reduce the risks, but may not be enough to prevent the possible XSS vulnerability.
Another good prevention method is user’s input filtering. The idea of the filtering is to search for risky keywords in the user’s input and remove them or replace them by empty strings.
Those keywords may be:
- tags
- Javascript commands
- HTML markup
Input filtering is quite easy to practice. It can be performed in different ways too.
Like:
- By developers who have written server-side code.
- Appropriate programming language’s library is being used.
In this case, some developers write their own code to search for appropriate keywords and remove them. However, the easier way would be to select appropriate programming languages library to filter the user’s input. I would like to comment, that using libraries is a more reliable way, as those libraries were used and tested by many developers.
Another possible prevention method is characters escaping . In this practice, appropriate characters are being changed by special codes. For Example, Meanwhile, good testing should not be forgotten as well. It should be invested in good software testers knowledge and reliable software testing tools. This way good software quality will be better assured.
Prevention According to Technologies
As already discussed, filtering and characters escaping are the main prevention methods. However, it can be performed differently in different programming languages. Some programming languages have appropriate filtering libraries and some do not.
It should be mentioned, that filtering can be performed quite easily in Java and PHP programming languages, as they have appropriate libraries for it.
Java technology is quite widely used, therefore there are many solutions to it. If you are using Spring technology and if you would like to escape HTML for the whole application, then you have to write the appropriate code in the project’s web.xml file.
defaultHtmlEscape true
Ovaj će kôd prebaciti HTML izbjegavanje za cijelu aplikaciju.
Ako želite prebaciti HTML izbjegavanje za odgovarajuće obrasce stranice, tada bi kôd trebao biti napisan na sljedeći način:
Postoji mnogo spremnih XSS filtara u obliku .jar datoteke. Podsjetio bih da se .jar datoteka mora dodati vašem projektu i tek tada se mogu koristiti njene knjižnice. Jedan od takvih XSS filtera je xssflt.jar, koji je filtar servleta. Ovu .jar datoteku možete lako preuzeti s interneta i dodati u svoj projekt.
Ovaj filtar provjerava svaki zahtjev koji se pošalje aplikaciji i čisti ga od potencijalnog ubrizgavanja.
kako napisati test slučajeve u testiranju softvera s primjerom
Kad se projektu doda datoteka external.jar, ona također mora biti opisana u datoteci web.xml:
XSSFilter com.cj.xss.XSSFilter
Drugo moguće rješenje je ESAPI knjižnica. ESAPI knjižnica kompatibilna je s mnogim programskim jezicima. Možete pronaći ESAPI knjižnice za programske jezike Java i PHP. Riječ je o otvorenom izvoru i besplatnoj biblioteci koja pomaže kontrolirati sigurnost aplikacije.
XSS varalice
XSS Cheat Sheets mogu biti vrlo korisni za prevenciju skriptiranja na različitim web lokacijama. To je smjernica za programere o tome kako spriječiti XSS napade. Pravila su vrlo korisna i ne smiju se zaboraviti tijekom razvoja. XSS varalice možete pronaći u internetskim zajednicama kao što je OWASP (Projekt sigurnosti otvorenih web aplikacija).
Različite vrste varalica:
- XSS prevencija varalica
- DOM XSS varalica
- XSS varalica za izbjegavanje filtra
Glavna smjernica bila bi XSS Prevention Cheat Sheet, jer pruža zajednička pravila za prevenciju XSS napada. Ako biste slijedili pravila za varalice DOM XSS i pravila za izbjegavanje filtra XSS filtra, i dalje biste morali slijediti XSS Prevention Cheat Sheet.
Kao što je navedeno, XSS Prevention Cheat Sheet možete pronaći u zajednici OWASP. Ovaj nam varalica daje popis pravila koja bi nam pomogla da smanjimo rizike od mogućih XSS napada. Nisu samo pravila kodiranja već i sigurnosne ranjivosti na osnovi prevencije.
Nekoliko pravila uključuje:
- Ne treba umetati nepovjerljive podatke.
- HTML treba izbjeći prije umetanja nepovjerljivih podataka.
- Atribut treba izbjeći prije umetanja nepovjerljivih podataka itd.
Stoga varalice mogu biti od velike pomoći u prevenciji ove vrste napada.
Zaključak
Tijekom testiranja, toplo se preporučuje procijeniti rizike koji donose moguće XSS napade. XSS napad može utjecati na web aplikacije koje su, čini se, također sigurne.
Smatra se jednim od najštetnijih i najrizičnijih napada. Stoga ne bismo smjeli zaboraviti ovu vrstu testiranja. Tijekom izvođenja testiranja protiv XSS-a važno je dobro poznavati ovaj napad. To je osnova za ispravnu analizu rezultata ispitivanja i odabir prikladnih alata za testiranje.
Jeste li tester koji se bavio XSS napadima skriptiranja na više lokacija? Imate li zanimljivih činjenica o XSS napadima koje bi pomogle i našim čitateljima? Slobodno podijelite svoja iskustva s nama u odjeljku za komentare ispod !!
Preporučena literatura
- Dubinski vodiči za pomračenje za početnike
- Vodič za HTML injekcije: Vrste i prevencija s primjerima
- Vodič za ispitivanje ubrizgavanja SQL (Primjer i sprečavanje napada na ubrizgavanje SQL)
- Što je DDoS Attack i kako DDoS?
- Vodič za selensku mrežu: Postavljanje i primjer testiranja u više preglednika
- Java Vodič za refleksiju s primjerima
- SVN Vodič: Upravljanje izvornim kodom pomoću Subverzije
- Python DateTime Vodič s primjerima