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.

View all posts by this author →

You might also like

Tutorial 1Comments

Importar en phpMyAdmin: ¿cómo incrementar el límite de fichero?

A veces necesitamos importar una base de datos de gran tamaño utilizando el gestor de phpMyAdmin. Si el máximo permitido es insuficiente para realizar dicha importación, debemos “agrandarle la boca”. Para

Desarrollo 1Comments

Crear una web desde cero: ¿quién lo haría en su sano juicio?

El otro día me topé con un artículo de Hackanoon que planteaba algunas ventajas de desarrollar una web desde cero. A la brava. A pelo. From scratch… El autor asegura

Tecnologia & Ciencia 1Comments

Monsta, un cliente web FTP gratuito y abierto

¿Que es Monsta FTP? Es un cliente FTP de código abierto que puedes instalar fácilmente en cualquier servidor web. Está programado en PHP/Ajax y es muy sencillo de desplegar (sólo 2

0 Comments

No Comments Yet!

You can be first to comment this post!