2010-08-02 17 views
8

Qual è l'approccio migliore per la creazione di un sistema di login senza password?sistema di login senza password

Sto pensando di utilizzare una sorta di gettone generata in modo casuale di 16 caratteri, ad esempio:?

mysite/soci/index.php di token = 2j0n1qyjgcxyu3oy

sto sviluppando un sistema preventivo e la l'idea è che i fornitori non debbano registrarsi, invece creo il loro account per loro e tutto ciò che devono fare è cliccare sul link nella loro e-mail per inviare un preventivo. Ciò incoraggerà i fornitori a presentare un preventivo, poiché sapranno che non è necessario registrarsi o effettuare il login.

Non c'è molto danno che qualcuno potrebbe fare se capita di indovinare il token, ma io " Mi piace ancora rendere il sistema il più sicuro possibile senza richiedere una password.

+0

L'unico modo sicuro è usare un sistema diverso (passworded) di autenticazione, come [Active Directory] (http://php.net/manual/en/book .ldap.php). Ciò funzionerebbe per un'azienda con tutti i computer sullo stesso dominio AD, ma ovviamente non è applicabile per un sito Web pubblico. –

risposta

5

Un token andrebbe bene, userei un hash MD5 o SHA1 per questo.

Ma così si è consapevoli, quale sembra che tu sia, questo può essere annusato dagli sniffer di pacchetti, soprattutto tramite e-mail, quindi basta saperlo. Ma se questo non è un problema, non vedo un problema con l'utilizzo di un token per un fornitore. Se viene sniffato o abusato, semplicemente rigenerare un nuovo token per loro.

Spero che questo aiuti.

+0

Vuoi dire che il token dovrebbe essere un MD5, o dovrei confrontare il token con una versione MD5 del token memorizzato nel database? – GSTAR

+0

Il token stesso sarebbe un MD5, non "necessario", ma sarebbe la mia preferenza. –

+0

Ricorda che se il cookie viene ripristinato, l'utente perderà tutte le informazioni del suo account per sempre. –

1

Beh, il tuo token non sarebbe come una password un po '? Puoi anche reindirizzarli a un sito speciale, dove devono fare clic su un pulsante spezificato nella posta, per verificare la loro identità (o lasciarli inserire un pin dalla posta), così puoi essere sicuro di non inviare tutti i dati critici per ottenere, ma per POST (importante in un luogo pubblico)

Speranza ho potuto fare a

2

Questo è un approccio abbastanza comune. Il trucco è assicurarsi che il token sia unico. Ho usato un valore GUID in passato.

Tutto si riduce a quello che è il rischio rispetto alla ricompensa.

Qual è il rischio che qualcun altro possa utilizzare quel token per accedere al sistema. Poiché viene inviato tramite e-mail in chiaro, il rischio è probabilmente moderato. (Un utente malintenzionato dovrebbe essere in ascolto sulla sua rete o tra te e il suo host di posta elettronica.) Non ancora facile).

Qual è la ricompensa. L'autore dell'attacco potrebbe presentare una citazione nel nome dell'azienda. Quanto è grave? Questo dipende da te.

Un altro rischio che potrei vedere è se una società invia una citazione e poi decide che non vogliono onorarla. Potrebbero solo dire che non l'hanno presentato. Qualcun altro deve averlo fatto nel loro nome. Anche in questo caso, la probabilità di questo non è probabilmente molto alta e potrebbe essere affrontata in altri modi.

0

Se ricevono una sorta di e-mail giornaliera, è possibile generare un ID univoco separato per ciascun collegamento. Oppure espirali dopo un periodo specifico e dagli un aggiornamento via email una volta ogni x giorni.

Quanto è grande un affare se qualcuno indovina un ID o ottiene qualcuno?

Inoltre, perché solo 16 caratteri? Non devono scriverlo, quindi perché non farlo più a lungo?

pseudocodice

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

creerebbe un token di 64 caratteri.

+0

I metodi reverse/right/left sono inclusi in PHP? Inoltre, sono d'accordo nell'aumentare il numero di caratteri, anche se è molto improbabile che tu possa ottenere lo stesso token generato con 16 caratteri, probabilmente è estremamente improbabile che tu possa ottenere lo stesso con 64 caratteri! – GSTAR

+0

In PHP, sarebbe md5 (substr (md5 ($ key), 16). Substr (md5 ($ key), 0, 16)). Se stai usando MySQL, puoi anche usare "select uuid()", che (a livello di database) ti garantisce di ottenere un ID univoco globale. – Derrick

0

Si potrebbe provare un uuid:

<?php 

$uuid = `uuidgen`; 

echo $uuid; 

?> 
Problemi correlati