miércoles, 11 de junio de 2014

Conexión segura entre cliente / servidor comprobar datos hash

Buenas tardes!
Hoy vamos a aprender como poder comprobar que los datos que salen de una aplicación o web no se modifican por el camino para intentar engañar al servidor. Es decir, aremos una comprobación para ver si el dato que salió de la aplicación es el mismo que llegó al servidor.

Ejemplo: Imaginaros un man-in-middle, tenemos una aplicación con un ranking y un usuario mal intencionado intercepta su puntuación con algún programa proxy y la modifica por una superior. Llegaría al servidor y grabaría la puntuación aunque no fuera la real. Pues así lo vamos a evitar.


Hay formas de evitarlo más profesionales como por ejemplo encriptando la conexión con https o temas similares, pero si no nos importa que se vean los datos que enviamos y simplemente queremos asegurarnos que no los editan de camino al servidor voy a explicar como hacerlo!

El ejemplo que voy a hacer es entre Php (un formulario o algo) y el servidor. En este caso utilizaré parametros GET para hacer más sencillo el tutorial.

NOTA: Se podría adaptar todo esto perfectamente a android solo buscando como pasar el valor a md5. Y viendo el tutorial de esta misma web 'enviar datos al servidor des de android'.

<?php
////////////////////////////////////////////
////////Cliente ////////////////////////////
////////////////////////////////////////////

//Nos inventamos una clave privada
$clave = '23a89u';
//el dato que enviamos
//y comprobaremos en el server
$dato = '354';
//Lo encriptamos todo en md5
$hash = md5($clave.$dato);

////La dirección quedaría algo así
//alserver.com/envio.php?dato=345&hash=7474yr756yrr9a


/////////////////////////////////////////////
/////////Servidor ///////////////////////////
/////////////////////////////////////////////

//Hay que utilizar la misma clave en cliente/servidor
$clave = '23a89u';
//encriptamos la clave y el dato recibido y debe ser igual
//al hash que se creó en el cliente, si no es así
//significa que han modificado el dato por el camino
if (md5($clave.$_GET['dato']) == $_GET['hash']) {
 echo 'Dato valido recivido: '.$_GET['dato'];
}else{
 echo 'error, se intentado hackear.';
}
?>

El método es muy simple y muy efectivo! espero que os haya gustado.

No olvides comentar!!!
Muchas gracias!!!

No hay comentarios:

Publicar un comentario