Come evitare la perdita di informazioni del referer durante il reset della password

5

La maggior parte dei sistemi di reimpostazione della password comporta l'invio tramite posta elettronica all'utente di un collegamento occasionale che consente di reimpostare la propria password. Il token deve trovarsi nell'URL, poiché la maggior parte dei client di posta elettronica non consente alle e-mail HTML di eseguire richieste POST e chiedere all'utente di ridigitare il token non è un'esperienza accettabile. Tuttavia, questo mette il token a rischio di perdita attraverso l'intestazione del referer.

Una possibile soluzione a questo è evitare qualsiasi collegamento esterno nella pagina di reimpostazione della password. Tuttavia, la maggior parte dei siti dispone di un modello standard che include collegamenti esterni (Facebook, Twitter, ecc.) E il mancato utilizzo di questo modello renderebbe la pagina strana e potenzialmente potrebbe far pensare agli utenti che si tratti di un sito di phishing.

Sembra che i produttori di browser siano a conoscenza di questo problema e alcuni browser supportano il tag meta referer, che può essere impostato su "mai", quindi l'URL non è mai trapelato. Tuttavia, non tutti i browser supportano questo tag, quindi non è una soluzione completa.

Quindi, come si crea un processo di reimpostazione della password che non presenta questa fuga?

    
posta paj28 15.12.2014 - 18:20
fonte

3 risposte

3

La prima opzione, che ho visto usata in pratica, è esattamente ciò che cerchi di evitare. Non includere il token nell'URL, ma fornire un'istruzione all'utente per copiarlo e incollarlo fuori dall'e-mail e in un campo modulo sulla pagina che è collegato.

Se questa non è un'esperienza utente accettabile, suggerirei che il collegamento contenente il token sia invece un interstitial non interattivo. Il link invierà un utente a una risorsa che rimuove il token dall'URL, lo memorizza da qualche altra parte (un cookie, lo stato della sessione, qualsiasi cosa funzioni per te) e quindi 30x inoltra l'utente alla vera e interattiva pagina "password dimenticata" che non ha più il token nell'URL. Questo metodo ha un ulteriore vantaggio rispetto al metodo suggerito da diverse altre risposte (token non valido al caricamento della pagina) in quanto è possibile continuare a utilizzare lo stesso token per un periodo ragionevole finché il modulo non viene inviato, quindi se l'utente dimentica o chiude il pagina accidentalmente, possono semplicemente reinserire il processo dalla loro e-mail, piuttosto che dover ricominciare dall'inizio con una nuova richiesta di password dimenticata.

    
risposta data 30.11.2016 - 21:37
fonte
3

Link trapelatori del browser?

Ecco uno screenshot delle mie impostazioni di Chrome:

Puoivederecheilbrowserpuò:

  • interrogaunaltroserviziopersapereseillinkèlegittimo
  • interrogaunaltroservizioseillinkpresentaunerrore

Nonconoscolespecifiche,maciòsignificachedevianchepreoccupartidiqueiservizicheperdonoiltokenprimachel'utenteabbialapossibilitàdivisitarelapaginaonelcasoincuiiltuoserverwebsiaconfiguratoinmodoerrato.

Paginadireimpostazionedellapassword

  • Senonvuoicollegareleinformazionidelreferente,nonincludereillink.
  • Sevuoimitigarealcunieffetti,includiunstrong token CRSF in <input type="hidden"> ; in questo modo, anche se il collegamento è compromesso, hanno ancora bisogno di un token CRSF valido.
    • Perché non richiedere anche un cookie?
  • Se, per caso, stai utilizzando github per ospitare il codice del tuo sito web, non mettere online la tua configurazione (ad esempio il valore di SECRET_KEY per generare token).
risposta data 15.12.2014 - 19:17
fonte
2

Poiché si tratta di un collegamento singolo, invalida il token originale e ne genera uno nuovo nella pagina (rendilo un campo invisibile nel modulo), quindi POST con il modulo per la reimpostazione della password.

Inoltre, non aggiungere ulteriori informazioni che potrebbero far trapelare l'identità dell'utente nel link di posta elettronica. Un token SHA-256 è sufficiente per completare il processo di reimpostazione della password.

    
risposta data 15.12.2014 - 18:53
fonte

Leggi altre domande sui tag