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

Introducció 
El seu nom original és Cross Site Scripting, i s'abrevia com XSS per no ser confós amb les sigles CSS, (fulls d'estil en cascada). Les vulnerabilitats de XSS originalment s'estenen qualsevol atac que permeti executar codi de scripting, com VBScript o JavaScript, en el context d'algun altre lloc web (recentment això 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:
 http://www.example.com/home.asp?frame=menu.asp
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!).
 javascript:while(1)alert("Aquest missatge sortirà indefinidament en bucle");
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 cookies de la víctima, per
a després poder
personificar-se com amb la seva sessió, o fer automàtic el procés amb la utilització de la
biblioteca cURL o alguna similar.
D'aquesta forma, en rebre la cookie, 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:
 error.php?error=Usuari%20Invalid
é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'.
javascript:void prompt("Introdueix la
cookie:",document.cookie).replace(/[^;]+/g,function(_){document.cookie=_;});

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.
<BR SIZE="&{alert('XSS')}">
<FK STYLE="behavior: url(http://yoursite/xss.htc);">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
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:
<div fu="alert('Hola món');" STYLE="background-image: url(javascript:eval(this.fu))">

Referències

Enllaços externs 
 Exemple complet (SOAagenda.com)
 JaSiLDBG
 XSS Cheat Sheet 
 XSSdb 

Informàtica