Registro de usuario de pagina web con correo de activación de cuenta
Hola que tal comunidad, ya tenía buen rato consultando esta página, pero nunca me había registrado.
Ando en busca de una buena opción de autenticación de usuarios en una aplicación web que estamos próximos a arrancar, la necesidad es que sea suficientemente segura, ya que leyendo por todos lados, he leeido que todo es vulnerable, pero me gusta la forma en que ustedes, al momento de registrarte en la página no estableces contraseña, si no hasta despues de que accedes mediante el link de activación que te envían, bueno, pues ese código es el que me gustaría leer, para analizarlo y tratar de adaptarlo a mi aplicación, les agradecería mucho lo pudieran compartir.
Tambien me gustaria saber si utilizan algún tipo de encriptación hash.
De antemano muchas gracias
- nancyesy's blog
- Inicie sesión o regístrese para enviar comentarios
Drupal
El sitio actualmente corre en Drupal, que es software libre así que puedes ver el código directamente, pero es PHP.
Estamos trabajando en una versión del sitio hecha en Java, el código lo puedes ver aquí pero todavía no tenemos hecha esa parte.
Hash no es encriptación, es una digestión, es irreversible. Se usa generalmente para almacenar passwords y eso sí ya lo tenemos hecho.
Hash
Gracias por responder, entonces ya tienen hecha la parte de almacenar passwords digeridos, me gustaría ver esa parte. Bajaré el proyecto que ya vi, que está algo complicado de clonar, pero lo lograré, jaja.
Por lo de correos de activación tienes algún material de referencia que pudieses proporcionarme para leer o alguna idea de como lo van a hacer.
Clonar?
Clonar? Veras que no es complicado, aqui te dejo este tutorial para que te bajes el proyecto javaMéxico 2.0.
Instalando el proyecto Java México 2.0 by @santos.r09
Saludos.
O otra opción es bajar
O otra opción es bajar
No necesitas siquiera tener base de datos instalada, solo lo bajas y lo ejecutas.
Correo de activación
El mecanismo es como sigue:
En cuanto al token, hay varias maneras de hacerlo. Una muy sencilla es hacer un hash (MD5, SHA-1, SHA-256, etc) de datos que el usuario dio y de datos que el usuario no tiene (es ESENCIAL que se usen datos que el usuario no tiene, para que no puedan falsificar el URL sin ver el mail). Los datos que el usuario no tiene pueden ser simplemente aleatorios, por ejemplo generar 16 bytes aleatorios y pegarlos con el mail, nombre, password y sacar el hash de eso, ese el token.
El objetivo es que el token no se pueda falsificar, de modo que haya que abrir el correo y obtener la liga. Es bueno que el correo contenga otras ligas al mismo sitio, en formato muy similar, para confundir al software más avanzado que ya realiza el proceso complejo de registrarse en un sitio y luego revisar el correo para obtener la liga de activación. Pero aunque se pongan varias ligas, una es la de activación, por lo que si este software es modificado para seguir TODAS las ligas que vengan en el correo, se va a activar de todas maneras. Por eso es recomendable que incluso después de seguir la liga se le pida nuevamente alguna pueba para determinar que sea humano, como otro captcha o hacer alguna pregunta sencilla de responder para un humano pero no para un programa.
Recientemente leí de un mecanismo que requiere Javascript y que consiste en que se realicen cálculos en el navegador que sean algo costosos en CPU, de modo que un usuario normal no lo note mucho (si acaso un retraso de un par de segundos) pero para un programa que quiera realizar esa operación de manera simultánea porque quiere dar varios usuarios de alta, le cuesta mucho más tiempo. No sé qué tan eficiente sea y ciertamente no es sencillo de implementar, pero pues son opciones para combatir el spam.
Probando
Gracias por sus comentarios, acabo de leerlos, y voy a ponerlos en práctica, instalaré el proyecto y haré pruebas, gracias ezamudio por especificar los pasos a seguir para el correo de activación, y en definitiva creo que es imposible protegerte al 100% de accesos no autorizados, pero pues se tiene que dejar la app lo menos vulnerable posible.
Cualquier duda les escribo. :)
Spring Security
Si tu proyecto usa Spring, Spring Security es una buena opción, provee mecanismos para autorización y autenticación.
Yo lo acabo de implementar en un proyecto y no es tan complicado, ya provee el uso de roles, permisos, acceso a diferentes tipos de recursos, integración con datasource y cifrado vía md5, sha, etc...
Saludos.