
En este post vas a aprender una de las 10 vulnerabilidades más comunes que tienen los sitios web cómo explotar estas vulnerabilidades y también cómo protegernos de esta y por cierto este post es con fines educativos no vayas por ahí hackeando webs, es ilegal, y te puedes meter en muchos problemas y la mayoría de las webs guardan registros de dónde vienen las conexiones así que solo haz esto en tus servidores.
Antes de continuar, puedes leer este post o ver y escuchar esta información en formato de video en nuestro canal de Youtube, te dejamos el link por si prefieres este formato. 😃 👍
Recuerda que puedes aprender a programar desde cero o aprender una nueva tecnología con mis cursos de programación en la Academia Hola Mundo, además si es que quieres mejorar tu concentración al momento de trabajar o de estudiar puedes escuchar mi música de hola beats, ésta está pensada en estudiantes y también profesionales especialmente en programadores, la puedes encontrar en Spotify, Apple Music, Amazon Music, Youtube Music y Deezer.
Y ahora de vuelta al post
¿Qué es Cross Site Scripting?
Cross site scripting es un tipo de inyección donde código malicioso es inyectado en una web que podría ser considerada benigna o confiable, generalmente el código malicioso es inyectado en la forma de un script web donde el atacante busca ejecutar código JavaScript en algún usuario de la aplicación que se esté atacando y esto con el objetivo de poder acceder a las cookies a las sesiones del usuario o información sensible, la cual es almacenada en el explorador de la víctima o sea que con código JavaScript un hacker puede suplantar la identidad de una persona y esto al obtener los datos de sesión del usuario
Así es, este lenguaje que tanto les gusta a ustedes es el que se utiliza para este tipo de hacking, si quieres aprender a usar este lenguaje, tenemos el curso Aprende Javascript, HTML5, CSS3 y NodeJS desde cero.
Y ahora vamos a ver este post en dos pasos, el primero es como se ejecuta este tipo de ataque y el segundo es como nosotros nos podemos proteger de este tipo de ataques
¿Como se hace el cross site scripting?
Para que un usuario pueda correr código malicioso inyectado por un hacker, este tiene que poder ejecutarlo en su máquina y poder verificar esto de manera silenciosa la verdad es que es bastante sencillo para verificarlo, solamente necesitamos el campo de un formulario aquí, como podemos ver, tenemos una aplicación que contiene un campo de texto y a su vez también contiene un botón, con lo cual nosotros vamos a enviar los datos del formulario

La mayoría de los datos que nosotros vamos a ingresar en este tipo de formularios van a ir a parar, ya sea a un archivo o a una base de datos, y luego estos datos son leídos en un cliente web o un cliente móvil.
Lo que haremos será ingresar un script de JavaScript en este formulario, y vamos a revisar luego si es que este script se está ejecutando en el cliente web.
Así que lo que haremos acá será ingresar el texto siguiente en el input y enviar la información del formulario:
hola mundo <script>console.log("hola mundo")</script>
Luego de que este dato se guardó, vamos a poder ver que aparece un listado donde en este caso tenemos el texto de hola mundo que fue lo primero que nosotros ingresamos, pero el resto del texto el que se encuentra dentro de las etiquetas de script, podemos ver que no aparece no está siendo interpretado como texto HTML y esto no es texto HTML el explorador web lo está interpretando como si este fuese código JavaScript completamente válido

De esta manera, es como un hacker puede empezar a acceder a ciertos datos que se encuentran dentro del explorador web, lo que haremos ahora será darle click derecho e inspeccionar, y vamos a pinchar acá donde dice consola pinchamos, y aquí nosotros vemos que está apareciendo en la consola el texto de «Hola Mundo» de esta manera nosotros estamos seguros de que el código JavaScript se está ejecutando.

En este caso empezar a imprimir texto en la consola la verdad es que no nos interesa. Lo que a nosotros nos interesa es poder acceder a ciertos datos del cliente, esto pueden ser las cookies o las sesiones, asi que intentaremos acceder a las cookies.
Para eso, dentro de nuestra misma consola del navegador vamos a escribir document.cookie vamos a presionar enter, y en este caso esta web no presenta cookies:

vamos a ver si podemos acceder a otro tipo de datos en este caso al local storage así que vamos a escribir acá console.log y dentro de esto localStorage y aquí nosotros podemos ver que estamos accediendo a los datos.

Ahora ¿qué podríamos hacer en este caso con estos tipos de datos que son ally-supports-cache, userData y lenght? La verdad es que nada, pero existen otras webs que si van a almacenar datos dentro de sus locale storage, esto podría hacer sesiones, ser las keys que pueden identificar a un usuario con una API rest, el idioma, entre otros datos sumamente sensibles.
Vamos a suponer en este momento que esta aplicación contiene una key que permite identificar al usuario y que esta se encuentra dentro del local storage, vamos a inyectar ahora otro script con el cual nosotros vamos a poder ejecutar también este mismo console.log del local storage.
Igualmente dentro de este input del formulario:
hola mundo <script>console.log(localStorage)</script>
Vamos a presionar en enviar vemos y ahora cómo no aparece absolutamente nada en nuestro listado, pero si nosotros inspeccionamos y pinchamos aquí en console vemos que se está imprimiendo en nuestra consola todo lo asociado al local storage.

En este momento el hacker lo único que necesita hacer es crear un pequeño script que tome estos datos del local storage y los envíe a una API y donde él pueda recolectar todos los datos de la sesión y de esta manera suplantar la identidad de otro usuario, entonces ¿cómo podemos prevenir esto?
¿Comó nos protegemos del cross site scripting?
Algunos instructores podrían decirte que con tan solo hacer un escapado de strings sería suficiente para que los datos que guardemos en la base de datos sean seguros, ¿cómo se podría implementar eso? Existe una librería que se llama lodash, la cual contiene un método que se llama scape y lo que hará este método será convertir ciertos caracteres: &, <, >, ", ', en su valor correspondiente en HTML, para que el explorador lo interprete como el carácter y no como una instrucción de código.
El problema es cuando nosotros tenemos más fuentes que escriban en una misma base de datos, nosotros podríamos tener scripts que estén analizando hojas de cálculo, archivos de texto o incluso que estén haciendo un screen web en este caso sería necesario que nosotros tengamos que hacer un script string de cada una de estas cosas y también tenemos que considerar la antigüedad de la base de datos podría ser que ya se hayan ingresado datos los cuales no estén sanitizados
En este caso, analizar la base de datos y empezar a hacerle un script a todos los strings que hayamos guardado podría ser que terminemos con un doble escapado de strings y eso lo que va a hacer es que va a empezar a colocar caracteres extraños en nuestras páginas web, y eso no es lo que nosotros queremos, por lo que hacer un doble escapado no es necesariamente una solución.
Algo que yo he visto que hacen las empresas es que buscan de manera activa cuando se está guardando algo en la base de datos la etiqueta de script y en el caso que la encuentran sencillamente la eliminan y todo el contenido que se encuentra dentro este tipo de implementaciones la puede utilizando triggers en tu base de datos modelando toda tu aplicación para que solamente se utilice un punto de escritura como podría ser por ejemplo en una API rest.
Las alternativas son muchas, pero lo importante es que tienes que estar pendiente de distintos lugares que puedan estar escribiendo en tu base de datos, con tan solo hacer un script a tus string no es suficiente y en cuanto a seguridad a veces es mejor ser un poco paranoico en cuanto a quién y cómo se escriben los datos, ya que podrías ser víctima de un hackeo incluso a través de una planilla Excel y ahora que ya sabes esto y que prácticamente te pueden hackear desde cualquier lado te quiero dar la bienvenida al paranoide driven development
Y esto ha sido todo de este post, si te ha encantado, ¡golpea al botón de me gusta!, dejanos un comentario, y visita nuestra Academia Hola Mundo, donde encontrarás todos los cursos para formarte como un desarrollador o desarrolladora.
Y para no perderte nada, no olvides suscribirte a este blog, seguirnos en todas las redes como Youtube, Twitter e Instagram.
¡Hasta la próxima!, y chao mundo
Deja un comentario