domingo, 16 de marzo de 2014

PHP - Encriptar cadenas para urls

Aquí dejo una función realizada en PHP para encriptar cadenas y así mantener un poco la seguridad de nuestras aplicaciones al pasar parámetros en las urls. La idea es encriptar el valor de identificadores sensibles ?id=123 para que estas no estén expuestas en bruto; posterior a eso desencriptarla al ser recibida tras un $_REQUEST. Todo esto utilizando base64.

Función de encriptado:
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}

Función de desencriptado:
function decrypt($string, $key) {
$result = '';
$string = base64_decode($string);
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)-ord($keychar));
$result.=$char;
}
return $result;
}

El esquema:
$sql="SELECT * FROM usuarios";
$can=mysql_query($sql);
while($dato=mysql_fetch_array($can))
{
$nombre = $can['nombre'];
$id = $can['id'];
}
$id_encriptada = encrypt($id,"mi_llave");
echo "<a href='view.php?id=$id_encriptada'>Ver $usuario</a>";

Por ejemplo aquí en vez de pasar view.php?id=123 podría pasar view.php?id=olakase. Así mantendríamos resguardada la id original de la base de datos.

Al otro lado en view.php
$id_recibida = $_REQUEST[id];
$id_desencriptada = decrypt($id_recibida,'mi_llave');
$sql = "SELECT * FROM usuarios id = '$id_desencriptada';


Aquí ya podríamos realizar la consulta con la id original.

No hay comentarios:

Publicar un comentario

emerge © , All Rights Reserved. BLOG DESIGN BY Sadaf F K.