Cross Site Scripting

Esta es una vulnaberabilidad de un sitio Web que permite que se  pueda inyectar codigo en una pagina, como inyectra codigo Javascript.

Por ejemplo supongamos hay un sitio Web que tiene un formulario (form) que solicita el login del usuario, el cual se valida y si no es correcto se devuelve una pagina Web indicando “el nombre de usuario XXX es incorrecto”, donde “XXX” corresponde al dato ingresado (nombre usuario) en el formulario.

Si uno ingresa “DIEGO” como nombre de usuario y este no es válido, entonces se va a desplegar:

el nombre de usuario DIEGO es incorrecto


Lo que esta bien, pero el problema es cuando se coloca este texto

“alert(19700328)”

como nombre de usuario, y la pagina muestra una alert Javascript con el numero “19700328”.

En este caso, esa pagina es vulnerable en “Cross Site Scripting”.

Este es el codigo de la pagina formulario del ejemplo:






form cross scripting



Usuario:


<br />

Clave:






Y este es el código de la pagina que es “vulnerable”, es decir, se le puede inyectar javascript:






vulnerable


<strong>Error<br />
</strong>el nombre de usuario  es incorrecto


La solución es validar a nivel de servidor, de la siguiente forma:

  • Primero validar a nivel del tipo de dato, por ejemplo validar que el campo sea un email válido.
  • Segundo validar que no vengan caracteres “peligrosos”

<> (mayor, menor)

| (pipe)

& (ampersand)

; (punto coma)

$ (signo moneda)

% (porcentaje)

‘ (comilla simple)

” (comilla doble)

‘ (backslash-comilla)

” (backslash-doble comilla)

() (parentesis)

+ (signo mas)

CR (retorno carro, ASCII 0x0d)

LF (salto linea, ASCII 0x0a)

, (coma simple)

@ (arroba)

Luego al devolver o usar el campo, se debe

  • Primero, usar la secuencia de escape adecuada, por ejemplo para las paginas Web (Html) podemos usar “escapeHtml”( http://commons.apache.org/lang/download_lang.cgi ), con lo cual el browser no lo interpreta como un comando Javascript o comando Html.
  • Luego,  si efectivamente el valor entregado es “extraño”, por ejemplo se detecta que tiene palabras reservadas Javascript ni siquiera devolverlo en una pagina, y registrarlo en el log de la aplicación.






vulnerable


<strong>Error<br />
</strong>el nombre de usuario "

" es incorrecto


Lo bueno que para encontrar este tipo de problemas existen herramientas que revisan un sitio y entregan un reporte con toas las vulnerabilidades como IBM AppScan (http://www-01.ibm.com/software/awdtools/appscan/)

Advertisements