cross site scripting attack tutorial with examples
Kompletní průvodce útokem XSS (Cross Site Scripting), jak tomu zabránit a testování XSS.
Cross Site Scripting (XSS) je jedním z nejpopulárnějších a nejzranitelnějších útoků, který zná každý pokročilý tester. Je považován za jeden z nejrizikovějších útoků na webové aplikace a může mít také škodlivé následky.
XSS se často srovnává s podobnými útoky na straně klienta, protože během tohoto útoku se většinou používají jazyky na straně klienta. Útok XSS je však považován za riskantnější kvůli jeho schopnosti poškodit i méně zranitelné technologie.
V tomto výukovém programu útoku na XSS vám poskytneme kompletní přehled o jeho typech, nástrojích a preventivních opatřeních s dokonalými příklady v jednoduchých termínech pro vaše snadné pochopení.
Co se naučíte:
- Úvod do XSS Attack
- Jak se provádí XSS?
- Typy útoků skriptování napříč weby
- Jak testovat proti XSS?
- Nástroje pro testování XSS
- Srovnání s jinými útoky
- Způsoby, jak zabránit XSS
- Prevence podle technologií
- Podvádět listy XSS
- Závěr
- Doporučené čtení
Úvod do XSS Attack
Cross Site Scripting attack je injekce škodlivého kódu, která bude provedena v prohlížeči oběti. Škodlivý skript lze uložit na webový server a spustit jej pokaždé, když uživatel zavolá příslušnou funkci. Lze jej provést také jinými metodami - bez jakéhokoli uloženého skriptu na webovém serveru.
Hlavním účelem tohoto útoku je ukrást údaje o totožnosti druhého uživatele - soubory cookie, tokeny relací a další informace. Ve většině případů se tento útok používá ke krádeži souborů cookie druhé osoby. Jak víme, soubory cookie nám pomáhají automaticky se přihlásit. Díky odcizeným cookies se tedy můžeme přihlásit pomocí jiných identit. A to je jeden z důvodů, proč je tento útok považován za jeden z nejrizikovějších.
Útok XSS se provádí na straně klienta. Lze jej provádět s různými programovacími jazyky na straně klienta. Tento útok se však nejčastěji provádí pomocí Javascriptů a HTML.
Doporučené čtení=> Výukový program HTML Injection
Jak se provádí XSS?
Cross Site Scripting attack znamená odesílání a vkládání škodlivého kódu nebo skriptu. Škodlivý kód se obvykle píše v programovacích jazycích na straně klienta, jako jsou Javascript, HTML, VBScript , Flash atd. K provedení tohoto útoku se však většinou používají Javascript a HTML.
Tento útok lze provést různými způsoby. V závislosti na typu útoku XSS se může škodlivý skript projevit v prohlížeči oběti nebo uložit do databáze a spustit pokaždé, když uživatel zavolá příslušnou funkci.
Hlavním důvodem tohoto útoku je nevhodné ověření vstupu uživatele, kdy se do výstupu může dostat škodlivý vstup. Uživatel se zlými úmysly může zadat skript, který bude vložen do kódu webu. Prohlížeč potom není schopen zjistit, zda je spuštěný kód škodlivý nebo ne.
Proto se v prohlížeči oběti spouští škodlivý skript nebo se uživatelům zobrazuje jakákoli falešná forma. Existuje několik forem, ve kterých může dojít k útoku XSS.
Hlavní formy skriptování mezi weby jsou následující:
- Křížové skriptování mezi stránkami může nastat ve škodlivém skriptu prováděném na straně klienta.
- Falešná stránka nebo formulář zobrazený uživateli (kde oběť zadá přihlašovací údaje nebo klikne na škodlivý odkaz).
- Na webových stránkách se zobrazenými reklamami.
- Škodlivé e-maily zaslané oběti.
K tomuto útoku dochází, když uživatel se zlými úmysly najde zranitelné části webu a odešle jej jako vhodný škodlivý údaj. Škodlivý skript se vkládá do kódu a poté se odesílá jako výstup konečnému uživateli.
Pojďme analyzovat jednoduchý příklad: Vezměte v úvahu, že máme web s vyhledávacím polem.
Pokud je vyhledávací pole zranitelné, bude uživatel spuštěn při zadání libovolného skriptu.
Zvažte, že uživatel zadá velmi jednoduchý skript, jak je znázorněno níže:
alert(‘XSS’)
Poté po kliknutí na 'Vyhledávání' tlačítko, zadaný skript bude proveden.
Jak vidíme v Příklad ,skript zadaný do vyhledávacího pole se provede. To jen ukazuje zranitelnost útoku XSS. Může však být napsán i škodlivější skript.
Mnoho testerů kombinuje útok Cross Site Scripting s Injekce Javascript , který se také provádí na straně klienta. V obou případech se vkládá škodlivý skript útoků. V případě případu útoku XSS však ke spuštění skriptu nejsou nutné značky.
Například :
;
Může to být také skript spuštěný u jiné události.
Například:Při najetí myší.
Pojďme analyzovat další příklad:Zvažte, že máme stránku, kde se na webu zobrazuje nejnovější recenze knihy.
Kód této stránky bude vypadat takto:
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
Tento kód přepne únik kódu HTML pro celou aplikaci.
Pokud chcete přepnout kódování HTML na příslušné formuláře stránek, měl by být kód napsán takto:
Existuje mnoho připravených filtrů XSS ve formě souboru .jar. Připomínám, že do vašeho projektu musí být přidán soubor .jar a teprve poté lze používat jeho knihovny. Jedním z takových filtrů XSS je xssflt.jar, což je filtr servletů. Tento soubor .jar lze snadno stáhnout z internetu a přidat do vašeho projektu.
Tento filtr kontroluje každý požadavek, který je odeslán do aplikace, a čistí jej od potenciální injekce.
Dotazy a odpovědi na ios pro zkušené pdf
Když je do projektu přidán soubor external.jar, musí být také popsán v souboru web.xml:
XSSFilter com.cj.xss.XSSFilter
Dalším možným řešením je knihovna ESAPI. Knihovna ESAPI je kompatibilní s mnoha programovacími jazyky. Naleznete knihovny ESAPI pro programovací jazyky Java a PHP. Jedná se o open source a bezplatnou knihovnu, která pomáhá řídit zabezpečení aplikace.
Podvádět listy XSS
Cheat listy XSS mohou být velmi užitečné pro prevenci skriptů mezi weby. Jedná se o vodítko pro vývojáře, jak zabránit útokům XSS. Pravidla jsou velmi užitečná a neměla by se na ně zapomínat při vývoji. Cheat Sheets XSS lze nalézt v internetových komunitách, jako je OWASP (The Open Web Application Security Project).
Různé typy podváděcích listů:
- Cheat Sheet pro prevenci XSS
- Cheat Sheet DOM XSS
- Cheat Sheet XSS Filter Evasion
Hlavním pravidlem by byl podvodný tah XSS Prevention, protože poskytuje společná pravidla pro prevenci útoků XSS. Pokud byste postupovali podle pravidel Cheat Sheet DOM XSS a Cheat Sheet XSS Filter Evasion, stále byste museli dodržovat Cheat Sheet Prevence XSS.
Jak již bylo uvedeno, podváděcí list pro prevenci XSS najdete v komunitě OWASP. Tento podváděcí list nám poskytuje seznam pravidel, která by nám pomohla snížit rizika možných útoků XSS. Nejedná se pouze o pravidla kódování, ale také o preventivní zabezpečení.
Několik pravidel zahrnuje:
- Nedůvěryhodná data by neměla být vložena.
- Před vložením nedůvěryhodných dat by měl být kód HTML ukončen.
- Před vložením nedůvěryhodných dat atd. By měl být atribut uniknut.
Cheat Sheet může být proto velmi užitečný při prevenci tohoto typu útoků.
Závěr
Při testování se důrazně doporučuje vyhodnotit rizika, která přinášejí možné útoky XSS. Útok XSS může ovlivnit i webové aplikace, které se zdají být také bezpečné.
Je považován za jeden z nejškodlivějších a nejrizikovějších útoků. Proto bychom neměli zapomenout na tento typ testování. Při provádění testování proti XSS je důležité mít o tomto útoku dobré znalosti. A to je základ pro správnou analýzu výsledků testování a výběr vhodných testovacích nástrojů.
Jste tester, který se zabýval útoky XSS skriptujícími mezi weby? Máte nějaké zajímavé fakty o útocích XSS, které by pomohly i našim čtenářům? Neváhejte se s námi podělit o své zkušenosti v sekci komentáře níže !!
Doporučené čtení
- Výukové programy pro zatmění do hloubky pro začátečníky
- Výukový program HTML Injection: Typy a prevence s příklady
- Výukový program pro testování injekce SQL (příklad a prevence útoku SQL Injection)
- Co je DDoS Attack a jak DDoS?
- Výukový program selenové mřížky: Nastavení a příklad testování mezi prohlížeči
- Výukový program Java Reflection s příklady
- Výukový program SVN: Správa zdrojového kódu pomocí Subversion
- Výukový program Python DateTime s příklady