Seguridad Web al limite: JS-Injection

Seguridad Web al limite: JS-Injection

seguridad-paginas-webHace unos meses os comentaba en un artículo la importancia de validar los datos en el servidor, puesto que las validaciones en el cliente son fácilmente manipulables.

Como también comentamos, esto podría resultar por parte de algún usuario mal intencionado, en que nuestra base de datos podía plagarse de datos “no deseados”, como por ejemplo, texto en campos puramente numéricos, o direcciones de email no válidas.

¿Aquí queda todo? NO.

¿Qué es el ataque de inyección de código JavaScript?

Lo vamos a explicar con un pequeño “juego”:

El siguiente código php, muestra un formulario y lista los usuarios ya almacenados en la base de datos:

articulo_js_1articulo_js_2

 

 

 

El problema, como veréis en el código, es que al no validar los datos en servidor, podéis introducir como nombre lo que querais:

<?php
include('db_conection.php');

if(!empty($_POST['nombre']))
        mysql_query('INSERT INTO `js_injection`(`nombre`) 
                                               VALUES ("'.$_POST['nombre'].'")');    

$request = mysql_query('select * from `js_injection`');
?>

<html>
<body>
        <h2>Listado</h2>
        <ul>
        <?php while($row = mysql_fetch_array($request)){?>
                <li><?php echo $row['nombre']; ?></li>
        <?php } ?>
        </ul>
        <h2>Registrate</h2>
        <form method="post">
                Registra tu nombre:<input name="nombre" type="text"/>
                <input type="submit"/>  
        </form>
</body>
</html>

Por tanto, si algún gracioso se diera cuenta de ello, podría literalmente cargarse nuestra página:

Vamos a intentar introducir el siguiente código JavaScript en el campo de texto nombre:

<script>while(true) alert('atacke js injection');</script>

articulo_js_3articulo_js_4

 

 

 

Al imprimir la lista de nombres desde PHP, el código resultante incluye un bucle infinito que muestra todo el tiempo una ventana, y el navegador interpreta y ejecuta perfectamente al tratarse de código JavaScript.

Ahora la página ha quedado bloqueada y lista para no poder ser usada.

Este tipo de ataque puede dar mucho de si. ¿Os imagináis que podría ocurrir si pudiéramos hacer que se ejecutara el código JavaScript que deseemos en una zona privada de una web?

Ampliaré en futuros artículos más información sobre este tema, y sobre otro tipo de inyecciones.

Saludos y gracias.

Previous ¿Cuándo es necesario migrar a un servidor dedicado?
Next Seguridad en Wi-Fi: ¿qué cifrado es mejor, TKIP o AES?

About author

plfgavilan
plfgavilan 21 posts

Ingeniero de telecomunicaciones con casi 4 años de experiencia en la ingeniería de software. Forma parte del proyecto Borrowbits desde hace varios años, donde colabora como escritor.

You might also like

Tutorial 1Comments

How-to: Parsear variables JSON con PHP

Puede ocurrir que nos interese decodificar un objeto JSON en una variable PHP. A mí me ha costado un pequeño dolor de cabeza, así que os transmito la lección aprendida

Tecnologia & Ciencia 2 Comentarios

Cómo evitar ser un freelance esclavo (I)

Atención a la contradicción dentro del sintagma nominal del título: freelance esclavo. ¿Es ésto posible? Si no tienes un poco de ojo, ya lo creo. En esta serie de artículos

Desarrollo 3 Comentarios

How-to: Instalación de Symfony, un framework de PHP

Symfony es PHP. Ni más ni menos. Se trata de un framework que te facilita la vida a la hora de programar una aplicación web, sin la necesidad de profundizar demasiado

0 Comentarios

Ningún comentario... todavía ;)

Tú puedes ser el primero en comentar este artículo!

Deja un comentario