DesarrolloLibre

Desarrollo Web, Android y mucho más

02-03-2016

Un punto importante en cualquier sistema que creemos sobre todos los accesibles mediante Internet es que sean "Seguros" para evitar un mal uso de la aplicación lo que llevaría al fracaso de la misma; un aspecto fundamental en esto en la cual se apoyan muchas otras tecnologías como el protocolo HTTPS es el uso de cifrados, encriptación, etc para "garantizar" que la información manejada sea "segura"; un caso más práctico es la de la autenticación:

imagen Autenticación

CodeIgniter no cuenta con un sistema de autenticación y tendrías que emplear una librería de un tercero (que existen varias si buscas un poco por Internet) o crear el nuestro propio; podemos crear fácilmente nuestro propio sistema básico de login si no se requiere de nada muy específico empleando una tabla en base de datos, la sección para registrar los datos y en todo esto es fundamental implementar medidas de seguridad como la que conversamos casi sin ningún esfuerzo; esta medida de seguridad consta en encriptar la contraseña o cualquier otros datos que consideremos como delicados como el código de la tarjeta de crédito.

La clase de encriptación de CodeIgniter -Encrypt Class-

CodeIgniter provee de una clase\librería llamada Encrypt Class que permite encriptar y desencriptar cadenas de texto en base a una llave (key) de condificación; con cadenas de textos se quiere decir nuestras contraseñas, códigos de targetas de crédito, etc.

Antes de poder usar esta librería, debemos establecer el valor de la key que hablamos anteriormente en el archivo de configuración application/config/config.php y buscamos la siguiente línea:

$config['encryption_key'] = '';

Y colocamos una clave de encriptación extraña:

$config['encryption_key'] = 'fs%&/df87&/f';
La llave (key) es una pieza que controla el proceso de encriptación del string que va a ser encriptado; es decir, cuando varíe la llave el resultado que arrojará sobre las cadenas a encriptar serán diferentes.

Ahora referenciamos y cargamos la clase de encriptación desde nuestro controlador en CodeIgniter:

$this->load->library('encrypt');

Una vez hecho esto, podemos encriptar una cadena o string empleando el método encode($string):

$msg = 'Un texto cualquiera'; 

$encrypted_string = $this->encrypt->encode($msg);

Para nuestro ejemplo, retornaría una cadena de texto como la siguiente (empleando la siguiente key):

/ZRStHHe1dUPkK8AHxF/dD1JeMMqSSoh2L+C+7IkNYH2Ung8jJlfVJItWOwZi98VV5L1mcOuoUph7+TGQU0g6Q==

Si deseamos emplear otra llave de encriptación diferente a la definida en el archivo de configuración application/config/config.php podemos emplear un segundo parámetro opcional en la cual especificamos otra llave:

$msg = 'Un texto cualquiera'; 
$key = 'fd(6yf#gfd'; 

$encrypted_string = $this->encrypt->encode($msg, $key);

Y retornaría otra cadena de texto encriptada como en el caso anterior.

Aquí vemos que aunque un supuesto atacante obtenga al menos algunas contraseñas o la tarjetas de crédito o cualquier otro valor delicado, no podrá hacer mucho con él siempre y cuando no obtenga nuestra key y sepa el algoritmo de encriptación lo que se convierte en una importante medida de seguridad que es muy fácil de incorporar.

¿Cómo desencriptar una cadena?

Con esto ya tenemos encriptada nuestra clave; ahora para poder trabajar con ella es necesario desencriptar el texto encriptado para poder trabajar con el mismo; para esto existe el método llamado decode($cadena_encriptada); si queremos recuperar el mensaje de la cadena encriptada anteriormente:

$encrypted_string = '/ZRStHHe1dUPkK8AHxF/dD1JeMMqSSoh2L+C+7IkNYH2Ung8jJlfVJItWOwZi98VV5L1mcOuoUph7+TGQU0g6Q==';

$this->encrypt->decode($encrypted_string);

Obtenemos nuevamente el mensaje:

Un texto cualquiera

También tienes la posibilidad de emplear una llave de encriptación que sea diferente a la definida en el archivo application/config/config.php aunque esta debe ser la misma empleada al momento de la encriptación:

$encrypted_string = $this->encrypt->decode($msg, $key);
Con la encriptación en CodeIgniter se generan cadenas largas las cuales varían aunque se trate de la misma cadena fuente y como vimos ,a encriptación puede ser revertida empleando la misma llave (key).

Consideraciones para el proceso de autenticación en CodeIgniter

Con esto vimos lo sencillo que es emplear esta clase en CodeIgniter; esta clase es idónea para trabajar con campos de alta confidencialidad como en el caso de contraseñas o password, las cuales se recomiendan encriptar apenas se reciba e inclusive guardar estas encriptadas en base de datos y solo desencriptar las mismas al momento de verificar las credenciales o procesar las mismas; con estas sencillas modificaciones se logra crear una capa adicional de seguridad que en el caso de que alguien vulnere nuestra base de datos no podrá tener acceso a la contraseña desencriptada y por lo tanto no podría hacer absolutamente nada con esos datos.

Ayúdanos a seguir creciendo

Publicidad

Give me for a beer!

Algunos recursos que te pueden interesar

API REST en CodeIgniter

API REST en CodeIgniter

TCPDF: clase Oper Source para generar PDF con PHP

TCPDF: clase Oper Source para generar PDF con PHP

Algunos artículos que te pueden interesar

¿Cómo consultar los últimos tweets publicados con PHP?

¿Cómo consultar los últimos tweets publicados con PHP?

En esta entrada veremos cómo consultar los últimos tweets publicado en la red social Twitter mediante PHP.

Andrés Cruz 30-07-2015

Conociendo PHP: La conversión de tipos

Conociendo PHP: La conversión de tipos

En esta entrada hablaremos un poco sobre la conversión de tipos en PHP al momento de realizar distintas operaciones como matemáticas.

Andrés Cruz 27-11-2015

Template Parser Class en CodeIgniter

Template Parser Class en CodeIgniter

Con la libraría Template Parser en CodeIgniter se pueden crear reglas de anidamientos con menos código y mucho más limpio sin la necesidad de emplear for o foreach lo que ayuda a la organización y legibilidad del código.

Andrés Cruz 04-04-2016