XSS (Cross Site Scripting)

El Cross-Site-Scripting es una vulnerabilidad que aprovecha la falta de mecanismos de filtrado en los campos de entrada y permiten el ingreso y envío de datos sin validación alguna, aceptando el envió de scripts completos, pudiendo generar secuencias de comandos maliciosas que impacten directamente en el sitio o en el equipo de un usuario.

El Cross-Site-Scripting es una vulnerabilidad que puede causar un impacto tanto a una aplicación web como a usuarios que de manera inconsciente activen dicha secuencia de comandos.

Dicho código malicioso se compone de cadenas de datos cuyo contenido son scripts completos contenidos en enlaces o ejecutados desde formularios.

En caso de que sea ejecutado el mismo se ejecutara en el equipo del usuario con todos los privilegios permitidos por las políticas de seguridad configuradas en el navegador del usuario o del sitio visitado, pudiendo realizar acciones diversas como la captura de cookies de usuario o la activación de servicios y componentes del sistema operativo del usuario victima.

La mayor problemática es que estas cadenas de código se encuentran ocultas a la sombra de vínculos en donde el usuario normalmente no hace una vista del código de dicho enlace y lo ejecuta con una política de confianza total, dicha ejecución se realiza de una manera indirecta, ya sea por una activación vía hipervínculo o por la ejecución al momento de la carga de un sitio afectado por este tipo de ataque, el atacante no realiza su acción pensando en un usuario en especifico si no que actúa de manera de que afectan a cualquier usuario que inocentemente caiga en dicha trampa, las formas mas comunes de realizar dicha agresión es por medio de correos electrónicos, vínculos falsos o ataques directos a sitios no preparados para este tipo de ataque.

Una forma de ataque XSS sería la siguiente:

Imaginamos que estamos en un blog y hacemos un post con lo siguiente:

<script>alert("hola");</script>

Al cargar la página donde se refleja nuestro post aparecerá una ventanita como esta.

Bien parece algo chistoso, un pequeño saludo de entrada, pero ahora quizás a ese hola podemos agregarle algo más:

<script>while(1)alert("hola");</script>

Al cargar la pagina nos aparecerá la misma ventanita de saludo pero esta vez al darle click volverá a aparecer, floodeando nuestro navegador, ya que siempre que demos click en el botón aceptar del cuadro de dialogo nos seguirá apareciendo la misma ventanita, quitándonos toda posibilidad de interactuar con el sitio ya que la única forma de cerrar este cuadro de dialogo es cerrando la web que lo ejecuta, como vemos ya dejo de ser chistoso, pero hasta aquí llegaron los principiantes.

Ahora veamos lo que puede hacer alguien mas experimentado en el XSS.

Que tal si intentaran algo como esto:

<iframe src=http://mipagina.com/pagina.htm>

Y en el código de pagina.htm algo como esto:

<SCRIPT TYPE="text/javascript" LANGUAGE=JAVASCRIPT>
if (top.frames.length!=0)
top.location=self.document.location; </SCRIPT>

Como podemos observar cada vez que se ingrese a la página donde se refleja esta inyección se mostrara pagina.htm como frame superior.

Ahora veamos algo más dañino, vamos a eliminar todo el contenido de la página de post y vamos a remplazarlo por un mensaje nuestro y se logra de una manera tan sencilla como esta:

<script>document.documentElement.innerHTML="Borrada";</script>

Bueno creo que con esto tenemos suficiente como para tomarle importancia a algo que a simple vista parece inofensivo, así que pasaremos directamente a las recomendaciones para solucionar este tipo de agujeros en nuestra seguridad.

Para prevenir los ataques XSS, PHP dispone de una clase en su librería que se puede emplear de forma fácil y eficaz.

PHP Input Filter, es una clase escrita en PHP que permite filtrar código malicioso ingresado en los formularios para prevenir ataques XSS de manera sencilla, tiene la cualidad de no limpiar determinadas etiquetas o atributos.

Para utilizar esta clase, descargamos los archivos desde el web oficial e incluimos el archivo class.inputfilter.php al inicio de nuestro PHP. Luego se debe crear una instancia de la clase InputFilter, entonces podemos filtrar los datos con el método process de la siguiente forma:

require_once("class.inputfilter.php");
$ifilter = new InputFilter();
$nombre = $ifilter->process($_POST['nombre']);

También se pueden filtrar todos los campos enviados por el formulario, por ejemplo si el formulario es enviado por el método POST, podríamos utilizar el siguiente código para filtrar todos los campos para luego utilizarlos sin problemas.

require_once("class.inputfilter.php");
$ifilter = new InputFilter();
$_POST = $ifilter->process($_POST);

Descargar clase Inputfiler

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(7 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

5 respuestas a “XSS (Cross Site Scripting)”

  1. Mary dice:

    quiero saber como puedo realizar esta prueba de xss, lo intente pero no hizo nada…
    Yo tengo un formulario que inserta datos en una tabla de la bd, trate en uno de los inputs mandar codigo sql para que me truncara la tabla pero lo que hizo fue insertarme el registro como un simple texto, mi pregunta es…¿Tendré ya la protección o simplemente lo estoy haciendo mal?
    Gracias de antemano

  2. Danyelle dice:

    Hola!
    Fui víctima del self-xss, y ahora que hago?

  3. unreaxaccinon dice:

    Si, probablemente lo sea

  4. Tobi Haldi dice:

    Some truly prize blog posts on this internet site , saved to fav.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre