Come dimostrare che il sistema di autenticazione funziona e che il cliente sta utilizzando la password errata?

71

Occasionalmente (anche se raramente), alcuni dei nostri utenti dicono che la loro password non funziona: dicono che hanno digitato la password corretta ma hanno ricevuto il messaggio 'password errata' .

Diciamo loro di usare la funzione reset password , cosa che fanno, ma mantengono la sensazione che il sistema di autenticazione a volte non funzioni .

La nostra ipotesi è che la loro password non sia quella che ricordano, ma dal momento che non la memorizziamo in testo normale, abbiamo qualche modo per dimostrare che è così?

In alcune occasioni siamo stati in grado di mostrare loro che in una certa data avevano cambiato la loro password e poi se ne erano dimenticati, ed erano soddisfatti. Ma non è sempre così.

    
posta Mario Trucco 09.11.2016 - 16:17
fonte

9 risposte

84

Non c'è un modo molto veloce per dimostrarlo perché l'hash è progettato per non essere reversibile .

Puoi prendere la loro password richiesta e generare manualmente l'hash come @ suggerito da TechTreeDev . Dovresti utilizzare un hash salato (ad esempio BCrypt), quindi assicurati di utilizzare lo stesso sale.

  • Se l'hash generato manualmente corrisponde, hai riscontrato un problema nel codice di accesso.

  • Più probabilmente l'hash generato sarà diverso, quindi hai escluso i problemi relativi al codice di accesso , ma c'è ancora potrebbe essere un problema con l'impostazione della password , o un errore nella generazione manuale.

È praticamente l'estensione di ciò che puoi fare per verificare la password di una singola persona. Oltre a ciò, entriamo nei test di sistema.

  • Se sospetti un caso limite casuale / casuale, puoi creare uno script di test delle scimmie per impostare le password e poi provarle. Questo approccio è probabilmente eccessivo.

  • La cosa migliore è esaminare il tuo codice di accesso e tutti i punti che reimpostano la password . Il codice dovrebbe essere il più breve e conciso possibile. Secondo la mia esperienza, il modo migliore per escludere i problemi relativi ai casi limite è la revisione del codice, in quanto tali casi marginali spesso non sono coperti dai test manuali.

Alcune cose da cercare in particolare:

  • Assicurati che l'impostazione maxlength sia coerente (o, meglio ancora, non presente) su qualsiasi password <input> s. Stai cercando coerenza tra la configurazione della password e il modulo di accesso.

  • Assicurati che non vi sia alcun troncamento sul lato server

  • Assicurati che la codifica sia coerente. Se nella password è utilizzato un carattere non ASCII, il modulo di configurazione della password e i moduli di accesso devono comportarsi esattamente allo stesso modo.

  • Inoltre, non elimina automaticamente i caratteri spazi bianchi o non ASCII dalla password. Questo è il tipo di cosa che puoi facilmente catturare con una revisione del codice se il tuo codice è conciso.

Finalmente alcuni suggerimenti umani:

  • Verifica che stiano utilizzando il nome utente corretto per primo.

  • Verifica che l'impostazione Bloc Maiusc sia corretta.

  • Fornisci al personale dell'assistenza clienti un registro di ogni data / ora di accesso o di reimpostazione della password. Se c'è stato almeno un accesso dall'ultimo reset, allora sanno che il sistema ha funzionato correttamente.

    Finché il codice di accesso non è cambiato e l'hash è invariato dall'ultimo successo, puoi essere ragionevolmente sicuro che il problema deve essere una password errata.

  • Esamina l'errore UX dell'errore della password errata , fornendo all'utente alcuni suggerimenti semplici e una spiegazione autorevole delle possibilità. Ciò potrebbe ridurre le chiamate al servizio clienti.

  • Potrebbe essere utile inviare una notifica via email al cliente quando viene ripristinata una password per ricordarli. (o altro membro della famiglia in caso di account condivisi)

risposta data 09.11.2016 - 17:14
fonte
25

C'è un modo per saperlo con certezza, e questo è il calcolo dell'hash di ciò che l'utente ha inserito, usando lo stesso sale e confrontandolo con quello che hai. Tuttavia, questo è ciò che il processo di login già fa e l'utente non ci crede. Perché dovrebbero crederci quando lo fai per loro?

Invece, potresti fare quello che ho visto molto ultimamente, in Windows 10 ad esempio, ma anche sui siti web:

Offri all'utente un modo per verificare ciò che hanno inserito.

Naturalmente, quando accedi, i personaggi devono essere rappresentati come punti o altri caratteri, in modo che i ficcanaso non possano vedere la password guardando oltre la spalla dell'utente.

Ma finché è nel campo di input, non è stato ancora crittografato o hash in alcun modo. Quindi fornire un pulsante che trasforma quei punti nei personaggi reali.
In questo modo, dopo aver inserito la password sbagliata, possono inserirla nuovamente e vedere cosa hanno appena inserito. Oppure possono controllare prima di accedere.

Caps Lock dimenticati, turni sospesi, errori di battitura; possono essere tutti rilevati dall'utente in questo modo.

    
risposta data 09.11.2016 - 23:03
fonte
6

Per migliorare la tua esperienza utente, devi prima aggiungere un'interfaccia utente per comunicare agli utenti le seguenti condizioni:

  • Blocco maiuscole attivato
  • Avviso se ci sono spazi bianchi finali nel nome utente
  • Avviso se vengono rimossi gli spazi vuoti nella password
  • impedisce l'uso degli spazi bianchi nei messaggi di posta elettronica (se si utilizza l'e-mail anziché il nome utente)
  • impedisce l'uso e rimuove automaticamente le nuove righe (ci sono diverse nuove varianti di linea)
  • impedisce l'uso e rimuove automaticamente i caratteri di controllo
  • se utilizzi Javascript, alcuni browser lo disabilitano, quindi devi spostare questi passaggi sul lato server.

Anche quando la password inserita è errata, visualizza il seguente messaggio:

Password or username/mail is wrong, please type it paying attention to lower-case or uppercase letters and all symbols numbers, they must match perfectly. Avoid doing copy-paste because sometimes copying text may add additional unwanted whitespaces and/or newlines.

Ricorda che i tuoi utenti potrebbero avere ragione ! Una volta avevo un vecchio telefono che non mi permetteva di accedere a una pagina web, non so se si trattava di un problema di codifica del testo, ma la mia password era alfanumerica e funzionava perfettamente su un PC.

    
risposta data 10.11.2016 - 10:48
fonte
3

La risposta accettata copre davvero la maggior parte di esso. Ma supponendo che ho provato tutti i suggerimenti lì e ancora non sono riuscito a trovare il problema, avrei quindi provare a rilevare l'errore quando ciò accade. Per fare ciò, è possibile aggiungere il codice che ha registrato la password in chiaro ricevuta se un utente non è riuscito ad accedere due volte di seguito (in modo da escludere tutti gli utenti che hanno appena commesso uno stupido errore e lo ha corretto al secondo tentativo).

Per non indebolire la sicurezza del tuo sistema, puoi abilitare la registrazione della password solo quando sul telefono c'era effettivamente un utente che ha avuto problemi di accesso e registra solo la sua password, con il suo consenso.

La registrazione della password effettiva visualizzata dall'applicazione presenta il vantaggio di vedere esattamente ciò che vede l'applicazione. Dopo alcune chiamate da parte di utenti disperati, potresti iniziare a raccogliere un pattern nelle loro password (es. Spazio finale, caratteri speciali ecc.) Che indicava un problema nel tuo codice di accesso, o potresti vedere che significava em> per digitare "mysweetheart", ma invece hai digitato "myseetheart", il che significherebbe che i problemi di accesso erano molto probabilmente tutti errori dell'utente.

    
risposta data 09.11.2016 - 23:24
fonte
1

Non penso che l'esecuzione manuale dei passi di hashing della password sarebbe la soluzione. Se hai rilevato che non funziona, certo, puoi farlo a basso livello per eseguire il debug, ma i tuoi clienti se ne dimenticheranno quasi immediatamente.

Qui il problema è che stanno usando una password sbagliata, o perché l'hanno scritto male, o pensano davvero di averne usato uno diverso da quello che hanno fatto.

Per escludere il primo caso, falli scrivere la password desiderata in un editor di testo (ad esempio il blocco note), tagliarlo negli appunti e incollarlo nel campo della password. La password viene mostrata al cliente durante il processo, in modo che rimuova i casi in cui viene premuta una lettera sbagliata, Caps Lock è stato impostato ... (ovviamente ci aspettiamo che lo facciano in un momento in cui nessun altro guarda il loro schermo )

Il secondo caso è più difficile, poiché non vogliamo incoraggiare i clienti a mantenere un file di testo con le loro password. Idealmente, convinceresti i tuoi clienti a utilizzare un gestore di password come KeePass. Quindi, se la password, la stessa che ha funzionato in precedenza, viene copiata correttamente da Gestione password, puoi essere certo che sia effettivamente la password corretta.

Oltre a ciò, che richiede davvero un cambiamento di opinione dei tuoi clienti, puoi chiedere ai tuoi clienti di:

  • crea una nuova password
  • cambia la password con quella incollandola
  • prova ad accedere con la stessa password che hanno negli appunti

tutte le volte che vogliono, per tentare di riprodurlo.

    
risposta data 09.11.2016 - 18:28
fonte
1

Supponendo che tu stia registrando ogni volta che un utente effettua l'accesso, potresti essere in grado di dimostrare che sono stati in grado di accedere dal momento in cui hanno cambiato la password, sarebbe almeno sufficiente per escludere alcuni potenziali problemi.

    
risposta data 09.11.2016 - 23:17
fonte
1

Nell'incontrare quattro diversi sistemi di autenticazione con questa proprietà effettiva, è abbastanza facile da verificare in ciascun caso.

Caso 1: il sistema fallisce casualmente. In caso di errore, il contatore di accesso errato non viene incrementato. (Non sono stato in grado di ispezionare l'interno, ma sono abbastanza sicuro che quello che sta succedendo è che a volte perde la connessione con un altro server e segnala semplicemente la password sbagliata quando questo accade.)

Caso 2: il sistema si è verificato quando ho inserito un apostrofo nella mia password. Dimostrare che il campo della password era soggetto all'iniezione SQL era banale.

Caso n. 3: la password valida è stata respinta da un filtro caratteri nella schermata di accesso che la schermata della password non aveva. Questo è stato banale anche per dimostrare il problema.

Caso n. 4: il sistema non mi consente di accedere perché ha interpretato at-sign come kill line. Booo. L'accesso tramite telnet alla porta FTP ha dimostrato che avevo la password corretta.

    
risposta data 12.11.2016 - 18:30
fonte
0

Potresti memorizzare ogni password degli ultimi utenti (con hash) nel tuo database. Se la password inserita non corrisponde alla password corrente, confrontarla con quella precedente. Se c'è una corrispondenza, presenta un messaggio "Hai inserito una vecchia password - riprova" o un codice di errore in tal senso (così quando ti contattano, puoi chiedere "Vedi il codice di errore 47? Ciò significa che hai usato una vecchia password. ")

In questo modo, puoi essere abbastanza sicuro che il sistema di login funziona come ha fatto almeno alcune ricerche di password e l'utente ottiene un feedback che ha dimenticato la sua nuova password.

    
risposta data 10.11.2016 - 16:42
fonte
0

Sto postando una seconda risposta a cui ho pensato ieri, ma non ero sicuro che fosse consigliabile.

Potresti creare un registro temporaneo delle password impostato / ripristinato e tentato in una forma crittografata. Gli esperti di sicurezza (incluso me) rabbrividirebbero a questa idea di crittografare (invece di hashing) le password (o anche i tentativi errati di password), quindi suggerirei tre precauzioni se decidi di iniziare a registrare queste informazioni.

  1. Invia le informazioni a un computer separato / isolato , quindi se il server principale viene compromesso, il registro delle password è ancora sicuro.
  2. Utilizza la crittografia a chiave pubblica (asimmetrica) per le informazioni registrate. La chiave privata (decrittografia) viene memorizzata solo in un ambiente isolato affinché lo sviluppatore possa rivedere i dati registrati.
  3. Pianifica un'attività (o la codifica in) in modo che questo registro temporaneo sia disattivato in una data specifica o quando un numero sufficiente di test ha avuto esito positivo.
risposta data 10.11.2016 - 19:58
fonte

Leggi altre domande sui tag