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.

0 comentarios:

Publicar un comentario