Seguridad de acceso en PHP (I). Contraseñas reversibles.

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

clave-reversibleEs muy normal, cuando desarrollamos una aplicación en PHP, establecer un sistema de logueo de tal modo que sólo los usuarios registrados puedan acceder a dicha aplicación, o a una parte de ella. Por ejemplo, en un foro, un visitante anónimo podrá ver los mensajes que haya, pero necesitará ser usuario registrado y loguearse para postear mensajes o responder a los de otros.

La legislación vigente en España (y en otros paises) establece que las contraseñas de los usuarios deben ser almacenadas en la base de datos codificadas, de modo que, ante un posible ataque con robo de información, el atacante no pueda identificar esas contraseñas. La ley prohibe expresamente que las contraseñas se almacenen directamente como las teclea el usuario.

Para codificar las contraseñas se requieren dos pasos. El primero es codificarla cuando el nuevo usuario se registra y la graba (o cuando un usuario antiguo cambia su clave de acceso). Es en este paso donde la contraseña se almacena codificada. El segundo paso es codificar la clave de acceso cuando el usuario la usa para acceder, de modo que lo que comparamos contra la base de datos, para saber si el usuario ha accedido legítimamente, es la contraseña codificada.

La codificación puede hacerse desde dos perspectivas:

  • Codificación reversible. Es una codificación de la contraseña mediante un algoritmo reversible, es decir, que mediante el algoritmo correspondiente se pueda tomar la contraseña codificada y recuperar la original.
  • Codificación irreversible. Es más una encriptación que una codificación. El sistema permite encriptar la contraseña, pero no recuperar la original a partir de la encriptada.

En este articulo hablaremos del primer escenario, dejando el segundo para el siguiente post.

CODIFICACIÓN REVERSIBLE

Este sistema se basa en usar un algoritmo para codificar la contraseña cuando se graba, o cuando se teclea para acceder, para compararla con la que hay grabada. El algoritmo también tiene la posibilidad de revertir el proceso, recuperando la contraseña original.

El algoritmo puede ser nuestro propio, o bien alguno de los muchos que existen en Internet. Si usamos uno desarrollado por nosotros tiene la ventaja de que, al no ser público, la seguridad es mayor, ya que no es fácil deducir cómo ha hecho la codificación el desarrollador.

Este sistema es, de todos modos, el menos seguro. La codificación irreversible, que veremos en el próximo artículo, es más segura, y está destinada a sitios cómo entidades bancarias u otros que manejen datos especialmente sensibles. El sistema que estamos viendo aquí está destinado a sitios en los que la información sea menos delicada, cómo un foro, por ejemplo.

La ventaja de la codificación reversible radica en que, si el usuario pierde u olvida su contraseña, podemos implementar un proceso que la recupera a partir de la codificada en la base de datos, y enviarle un correo con la misma clave que el escogió.

Cómo algoritmos de codificación y descodificación, aquí ofrecemos un ejemplo que se puede emplear en cualquier aplicación en PHP.

El principal problema de seguridad que presenta este sistema es que un eventual ataque que implique el robo de la base de datos, es posible que también conlleve el robo del código PHP, lo que le daría al atacante el algoritmo de descodificación. De todos modos, si el servidor donde tenemos nuestro sitio implementa los sistemas de seguridad necesarios, este sistema es bastante eficaz.

No obstante, si nuestro sitio requiere más seguridad en las contraseñas, podemos emplear el sistema del próximo artículo.

     

Un comentario:

  1. Pingback: Seguridad de acceso en PHP (II). Contraseñas no reversibles. » eldesvandejose.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *