# Cross Site Scripting

XSS, de l'anglès Cross-site scripting (Escripting de servidors encreuats) és un tipus de vulnerabilitat informàtica o forat de seguretat basat en l'explotació de vulnerabilitats del sistema de validació de l'HTML incrustat.

## Introducció

El seu nom original és Cross Site Scripting, i s'abreuja com a XSS per no ser confós amb les sigles CSS, (fulls d'estil en cascada). Les vulnerabilitats de XSS originalment s'estenen a qualsevol atac que permeti executar codi de scripting, com VBScript o JavaScript, en el context d'algun altre lloc web (es podria classificar més correctament com a «diferents orígens»). Aquests errors es poden trobar en qualsevol aplicació que tingui com a objectiu final presentar la informació en un navegador web. No es limita a llocs web, ja que pot haver-hi aplicacions locals vulnerables a XSS, o inclús el navegador en si mateix. El problema està en el fet que casualment no es validen correctament les dades d'entrada que són utilitzats en determinada aplicació. Aquesta vulnerabilitat pot estar present de forma directa (també anomenada persistent) o indirecta (també anomenada reflectida).
* Directa (Persistent): aquest tipus de XSS comunament filtrat, i que consisteix a introduir codi HTML perillós en llocs que ho permetin; incloent-hi així etiquetes com <script> o <iframe>.
* Indirecta (Reflectida): aquest tipus de XSS consisteix a modificar valors que l'aplicació web utilitza per passar variables entre dues pàgines, sense utilitzar sessions i es dona lloc quan hi ha un missatge o ruta en l'URL del navegador, en una cookie, o qualsevol altra capçalera HTTP (en alguns navegadors i aplicacions web, això podria estendre's al DOM del navegador).

## XSS Indirecte (reflectit)

Suposem que un lloc web té la següent URL:
i que en accedir es crearà un document HTML enllaçant amb un frame a menu.asp. En aquest exemple, que passaria si es posa com URL del frame un codi javascript? (Atenció, no ho poseu vosaltres al vostre propi navegador!).
Si aquest enllaç el posa un atacant cap a una víctima, el visitant podrà veure'l i veurà que és del mateix domini, suposant que no pot ser dolent i de resultat tindrà un bucle infinit de missatges. Un atacant en realitat intentaria de col·locar un script que s'emporti les galetes de la víctima, per poder personificar-se després com amb la seva sessió, o fer automàtic el procés amb la utilització de la biblioteca cURL o altra de similar. D'aquesta forma, en rebre la galeta, l'atacant podria executar accions amb els permisos de la víctima sense necessitar tan sols la seva contrasenya. Un altre ús comú per aquestes vulnerabilitats és aconseguir fer phishing. Vol dir que la víctima veu en la barra de direccions una web, però realment està en una altra. La víctima introdueix la seva contrasenya i s'envia a l'atacant. Una pàgina com la següent:
és probablement vulnerable a XSS indirecte, ja que si escriu el document "Usuari invàlid", això significa que un atacant podria inserir HTML i JavaScript si així ho desitja. Per exemple, un tag com <script> que executi codi javascript, que creï una sessió com un altre usuari i enviï la sessió actual a l'atacant. Per provar vulnerabilitats de XSS en cookies es pot modificar el contingut d'una cookie de forma senzilla, utilitzant el següent script. Tan sols s'ha de col·locar a la barra de direccions i prémer 'Enter'.

## XSS Directe (persistent)

Funciona localitzant punts dèbils en la programació dels filtres de HTML, si és que existeixen, per a publicar contingut (com blogs, fòrums, etc.). Normalment l'atacant intentarà inserir tags com <iframe>, o <script>, però en cas de fallar, l'atacant pot intentar posar tags que gairebé sempre estan permesos i és poc coneguda la seva capacitat d'executar codi. D'aquesta forma l'atacant podria executar codi viral. Exemples: Una possibilitat és d'utilitzar atributs que permetin executar codi.
També es pot crear un DIV amb background-image: url(javascript:eval(this.fu)) com estil i afegir al DIV un camp anomenat fu que contingui el codi a executar, per exemple:

## Referències

* Fogie, Seth. Cross Site Scripting Attacks: Xss Exploits and Defense (en anglès), 2007. ISBN 1-59749-154-3.
* «The Cross-Site Scripting (XSS) FAQ». Cgi security, 2002. [Consulta: 14 octubre 2022].

## Enllaços externs

* Exemple complet (SOAagenda.com)
* JaSiLDBG
* XSS Cheat Sheet Arxivat 2012-09-11 a Wayback Machine.
* XSSdb Arxivat 2008-07-21 a Wayback Machine.