2010-08-02 9 views
8

¿Cuál es el mejor enfoque para crear un sistema de inicio de sesión sin contraseña?sistema de inicio de sesión sin contraseña

Estoy pensando en utilizar algún tipo de señal generada de forma aleatoria de 16 caracteres, por ejemplo:?

mysite/miembros/index.php token = 2j0n1qyjgcxyu3oy

estoy desarrollando un sistema de cotización y la La idea es que los proveedores no tienen que registrarse, en su lugar les creo una cuenta y todo lo que tienen que hacer es hacer clic en el enlace de su correo electrónico para enviar una cotización. Esto alentará a los proveedores a enviar una cotización, ya que sabrán que no necesitan registrarse o iniciar sesión.

No hay mucho daño que alguien pueda hacer si adivinan la ficha, pero yo ' Todavía me gusta hacer que el sistema sea lo más seguro posible sin necesidad de una contraseña.

+0

La única forma segura es el uso de un sistema diferente (passworded) de autenticación, como [Active Directory] (http://php.net/manual/en/book .ldap.php). Esto funcionaría para un negocio con todas las computadoras en el mismo dominio AD, pero obviamente no es aplicable para un sitio web público. –

Respuesta

5

Un token estaría bien, me gustaría utilizar un MD5 o SHA1 hash para él.

Pero lo que son conscientes, que parece se encuentre, puede ser inhalados por captura de paquetes, especialmente a través de correo electrónico, por lo que sólo sabía. Pero si eso no es un problema, no veo un problema con el uso de un token para un proveedor. Si se olfatea o se abusa, simplemente vuelve a generar un nuevo token para ellos.

Espero que ayude.

+0

¿Quiere decir que el token debería ser un MD5 o debería comparar el token con una versión MD5 del token almacenado en la base de datos? – GSTAR

+0

El token en sí sería una persiana MD5, no "necesaria", pero esa sería mi preferencia. –

+0

Tenga en cuenta que si se restablece la cookie, el usuario perderá toda la información de su cuenta para siempre. –

1

Bueno, no sería su token de ser como una contraseña de un poco? También puede redirigirlos a un sitio especial, donde tienen que hacer clic en un botón especificado en el correo para verificar su identidad (o dejar que ingresen un pin del correo), para asegurarse de no enviar todos los datos críticos por dan pero por mensaje (importante en un lugar público)

esperanza que podía ayudar

2

Eso es un enfoque bastante común. El truco es asegurarse de que el token sea único. He usado un valor GUID en el pasado.

Todo se reduce a lo que es el riesgo frente a la recompensa.

¿Cuál es el riesgo de que alguien podría utilizar esa señal para acceder a su sistema. Dado que se envía a través de correo electrónico de texto claro, el riesgo es probablemente moderado. (Un atacante debería estar escuchando en su red o entre usted y su host de correo electrónico. Todavía no es fácil).

Cual es la recompensa. El atacante podría enviar una cita a nombre de la compañía. ¿Qué tan malo es eso? Eso depende de ti.

Otro riesgo que podría ver es si una empresa envía un presupuesto y luego decide que no desea cumplirlo. Simplemente podrían decir que no lo enviaron. Alguien más debe haberlo hecho en su nombre. Nuevamente, la probabilidad de esto probablemente no es muy alta y podría tratarse de otras maneras.

0

Si reciben algún tipo de correo electrónico diario, puede generar una ID única separada para cada enlace. O expínelos después de un período específico, y bríndeles una actualización por correo electrónico una vez cada x días.

¿Cuán grande es el problema si alguien adivina una identificación u obtiene a alguien más?

Además, ¿por qué sólo 16 caracteres? No tienen que escribirlo, ¿por qué no hacerlo más?

pseudocódigo

$urlToken = md5(reverse(md5($key)) . md5(right(md5(key), 16) . left(md5(key),16)); 

crearía una muestra de 64 caracteres.

+0

¿Están incluidos esos métodos inversa/derecha/izquierda en PHP? También estoy de acuerdo en aumentar el número de personajes, ya que aunque es muy poco probable que obtengas el mismo token generado con 16 caracteres, ¡es muy poco probable que obtengas el mismo con 64 caracteres! – GSTAR

+0

En php, sería md5 (substr (md5 ($ key), 16). Substr (md5 ($ key), 0, 16)). Si también está utilizando MySQL, también puede usar "seleccionar uuid()", que (en el nivel de la base de datos) le asegura que obtendrá una identificación global única. – Derrick

0

Usted podría tratar de un UUID:

<?php 

$uuid = `uuidgen`; 

echo $uuid; 

?> 
Cuestiones relacionadas