cross site scripting attack tutorial with examples
Una guia completa per a l'atac de cross site scripting (XSS), com evitar-ho i proves XSS.
Cross Site Scripting (XSS) és un dels atacs més populars i vulnerables que tots els provadors avançats coneixen. Es considera un dels atacs més arriscats per a les aplicacions web i també pot comportar conseqüències perjudicials.
Sovint es compara XSS amb atacs similars al costat del client, ja que durant aquest atac s’utilitzen sobretot llenguatges del costat del client. No obstant això, l'atac XSS es considera més arriscat, a causa de la seva capacitat per danyar tecnologies encara menys vulnerables.
En aquest tutorial d’atac XSS, us oferirem una visió completa dels seus tipus, eines i mesures preventives amb exemples perfectes en termes senzills per facilitar-ne la comprensió.
Què aprendreu:
- Introducció a XSS Attack
- Com es realitza XSS?
- Tipus d'atacs de scripts entre llocs
- Com provar contra XSS?
- Eines de proves XSS
- Comparació amb altres atacs
- Maneres de prevenir XSS
- Prevenció segons les tecnologies
- Fulls d’engany XSS
- Conclusió
- Lectura recomanada
Introducció a XSS Attack
L’atac de cross site scripting és una injecció de codi maliciós que s’executarà al navegador de la víctima. L'escriptura maliciosa es pot guardar al servidor web i executar-se cada vegada que l'usuari truca la funcionalitat adequada. També es pot realitzar amb la resta de mètodes, sense cap script guardat al servidor web.
L’objectiu principal d’aquest atac és robar les dades d’identitat de l’altre usuari: galetes, fitxes de sessió i altra informació. En la majoria dels casos, aquest atac s’utilitza per robar les galetes de l’altra persona. Com sabem, les cookies ens ajuden a iniciar la sessió automàticament. Per tant, amb les cookies robades, podem iniciar la sessió amb la resta d’identitats. I aquest és un dels motius pels quals aquest atac es considera un dels atacs més arriscats.
S’està realitzant un atac XSS al costat del client. Es pot realitzar amb diferents llenguatges de programació del client. No obstant això, la majoria de les vegades aquest atac es realitza amb Javascript i HTML.
Lectura recomanada=> Tutorial sobre injecció HTML
Com es realitza XSS?
L'atac de cross site scripting significa enviar i injectar codi o script maliciós. El codi maliciós normalment s’escriu amb llenguatges de programació del client com Javascript, HTML, VBScript , Flash, etc. Tanmateix, Javascript i HTML s'utilitzen principalment per realitzar aquest atac.
Aquest atac es pot realitzar de diferents maneres. Depenent del tipus d'atac XSS, l'script maliciós es pot reflectir al navegador de la víctima o emmagatzemar-se a la base de dades i executar-se cada vegada que l'usuari truca la funció adequada.
El motiu principal d’aquest atac és la validació inadequada de l’entrada de l’usuari, on les entrades malicioses poden entrar a la sortida. Un usuari maliciós pot introduir un script que s’injectarà al codi del lloc web. Aleshores, el navegador no pot saber si el codi executat és maliciós o no.
Per tant, s’executa un script maliciós al navegador de la víctima o es mostra qualsevol formulari falsificat per als usuaris. Hi ha diverses formes en què es pot produir un atac XSS.
Les principals formes d’escriptura entre llocs són les següents:
- La creació de seqüències de llocs creuades es pot produir en un script maliciós executat al costat del client.
- Pàgina o formulari fals que es mostra a l'usuari (on la víctima escriu credencials o fa clic en un enllaç maliciós).
- Als llocs web amb anuncis mostrats.
- Correu electrònic maliciós enviat a la víctima.
Aquest atac es produeix quan l'usuari maliciós troba les parts vulnerables del lloc web i l'envia com a entrada maliciosa adequada. S’injecta un script maliciós al codi i s’envia com a sortida a l’usuari final.
Analitzem un exemple senzill: Penseu que tenim un lloc web amb un camp de cerca.
Si el camp de cerca és vulnerable, quan l'usuari introdueix qualsevol script, s'executarà.
Tingueu en compte que un usuari introdueix un script molt senzill com es mostra a continuació:
alert(‘XSS’)
Després de fer clic al botó 'Cerca' , s'executarà l'script introduït.
Com veiem al Exemple ,s'executa l'script escrit al camp de cerca. Això només mostra la vulnerabilitat de l'atac XSS. Tanmateix, també es pot escriure un script més perjudicial.
Molts provadors combinen atacs de cross site scripting amb Injecció de Javascript , que també s’està realitzant des del costat del client. En ambdós casos s’està injectant un script maliciós d’atacs. No obstant això, en el cas d'atac XSS no són necessàries etiquetes per executar l'script.
Per exemple :
;
A més, pot ser un script executat en l’altre esdeveniment.
Per exemple:Sobre el ratolí.
Analitzem un altre exemple:Tingueu en compte que tenim una pàgina on es mostra la darrera ressenya de llibres al lloc web.
El codi d’aquesta pàgina serà el següent:
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
Aquest codi canviarà l'escapada HTML per a tota l'aplicació.
Si voleu canviar l'escapada HTML per als formularis de pàgina adequats, el codi s'hauria d'escriure de la manera següent:
Hi ha molts filtres XSS preparats en forma de fitxer .jar. Recordo que cal afegir el fitxer .jar al vostre projecte i només llavors es poden utilitzar les seves biblioteques. Un d’aquest filtres XSS és xssflt.jar, que és un filtre de servlets. Aquest fitxer .jar es pot descarregar fàcilment d’Internet i afegir-lo al vostre projecte.
Aquest filtre comprova totes les sol·licituds que s’envien a l’aplicació i les neteja d’una possible injecció.
codi d'exemple de selenium webdriver a Java
Quan s’afegeix un fitxer external.jar al projecte, també s’ha de descriure al fitxer web.xml:
XSSFilter com.cj.xss.XSSFilter
Una altra possible solució és la biblioteca ESAPI. La biblioteca ESAPI és compatible amb molts llenguatges de programació. Podeu trobar biblioteques ESAPI per a llenguatges de programació Java i PHP. És una biblioteca de codi obert i gratuïta, que ajuda a controlar la seguretat de l’aplicació.
Fulls d’engany XSS
Els fulls de trucs XSS poden ser molt útils per a la prevenció de scripts entre llocs. És una guia per als desenvolupadors sobre com evitar atacs XSS. Les regles són molt útils i no s’han d’oblidar mentre es desenvolupen. Els fulls de trucs XSS es poden trobar a comunitats d’Internet com ara OWASP (The Open Web Application Security Project).
Diferents tipus de fulls de trampes:
- Full de trucs de prevenció XSS
- Full de trucs DOM XSS
- Full de trucs XSS Filter Evasion
La pauta principal seria el full de trucs de prevenció XSS, ja que proporciona regles comunes per a la prevenció d’atacs XSS. Si seguiu les regles del full de trampes DOM XSS i XSS Filter Evasion Filter, encara hauríeu de seguir el full de trampes de prevenció XSS.
Com s'ha dit, el full de trucs de prevenció XSS es pot trobar a la comunitat OWASP. Aquest full de trucs ens proporciona una llista de regles que ens ajudarien a reduir els riscos de possibles atacs XSS. No només es tracta de les regles de codificació, sinó també de les vulnerabilitats de seguretat, de manera preventiva.
Poques de les regles inclouen:
- No s’han d’inserir dades que no siguin de confiança.
- S'ha d'escapar de l'HTML abans d'inserir dades que no siguin de confiança.
- L'atribut s'ha d'escapar abans d'inserir les dades no fiables, etc.
Per tant, Cheat Sheet pot ser molt útil per prevenir aquest tipus d’atacs.
Conclusió
Durant les proves, es recomana avaluar els riscos que comporten possibles atacs XSS. L'atac XSS pot afectar les aplicacions web, que també semblen segures.
Es considera un dels atacs més nocius i arriscats. Per tant, no hem d’oblidar aquest tipus de proves. Mentre es realitzen proves contra XSS, és important tenir un bon coneixement d’aquest atac. I aquesta és la base per analitzar correctament els resultats de les proves i triar les eines de prova adequades.
Sou un provador que ha tractat atacs XSS de scripts entre llocs? Té alguna informació interessant sobre els atacs XSS que ajudaria els nostres lectors també? No dubteu a compartir les vostres experiències amb nosaltres a la secció de comentaris de sota !!
Lectura recomanada
- Tutorials Eclipse en profunditat per a principiants
- Tutorial sobre injecció d'HTML: tipus i prevenció amb exemples
- Tutorial de proves d'injecció SQL (Exemple i prevenció d'atacs per injecció SQL)
- Què és DDoS Attack i com fer DDoS?
- Tutorial de Selenium Grid: configuració i exemple de proves de navegadors creuats
- Tutorial de reflexió de Java amb exemples
- Tutorial SVN: Gestió del codi font mitjançant Subversion
- Tutorial de Python DateTime amb exemples