L'approccio di Django ai token di reimpostazione della password è sicuro?

6

Sto implementando una funzione reimpostazione della password per un'applicazione web e sto pensando di adottare un'implementazione simile a Django .

In poche parole, Django crea un token che comprende un timestamp e un hash del timestamp e l'ID utente. Questo hash è un HMAC e viene utilizzato per verificare che né il timestamp o l'ID utente siano stati manomessi.

Oltre al timestamp, le informazioni sull'utente come la sua password salt vengono sottoposte a hash. In questo modo, se l'utente cambia la sua password, il token diventa non valido, riducendo la finestra di opportunità per un utente malintenzionato.

Il codice sorgente per il generatore di token può essere visualizzato qui ed ecco lo pseudocodice:

function make_token(user)
  timestamp = current timestamp (now)
  value =  timestamp + user.id + user.password
  hash = create_hmac("some secret", value)
  return timestamp + ":" + hash

function check_token(user, token)
  timestamp = token.split(":")[0]
  hash = token.split(":")[1]

  if timestamp is after expiration date
    return false

  value =  timestamp + user.id + user.password
  comparate = create_hmac("some secret", value)

  // if the hash has changed, the token has been tampered with or the user has 
  // changed their password. 
  if hash != comparate
    return false

  return true

Questo sembra mi piace come una buona soluzione. I siti Web che eseguono Django lo fanno dal 2008 o giù di lì e non riesco a trovare alcuna segnalazione di vulnerabilità.

Ho fatto qualche ricerca e qualcuno su Hacker News non ha gradito questo approccio. Ci sono anche un paio di biglietti sull'argomento che esprimono preoccupazione. Tuttavia, devo ancora trovare una ragione specifica per cui questo potrebbe essere insicuro.

Si tratta di un approccio sicuro alla generazione di token di reimpostazione della password? In caso negativo, perché?

    
posta Angular noob 27.06.2015 - 21:20
fonte

1 risposta

3

Come per qualsiasi domanda su "è X sicuro", la risposta sarà, in una certa misura, "che dipende dai tuoi esatti requisiti dal punto di vista della sicurezza, dalle minacce che affronti, dal tipo di applicazione e dall'ambiente che ti distribuire in "

Tuttavia, con questo avvertimento, direi che lo schema sopra descritto sembra relativamente ragionevole dal punto di vista della sicurezza ed è decisamente migliore di molte funzionalità di reimpostazione della password che ho visto in passato.

Il bug report che hai collegato descrive uno scenario molto specifico (l'autore dell'attacco ha accesso in lettura a sezioni specifiche del codice lato server e configurazione, ma non ad altri accessi) che, sebbene rappresenti un rischio, è davvero marginale ( per me) come se avessero quell'accesso ci sono altre cose che potrebbero attaccare prima che inizino a generare link di reimpostazione password falsi per gli utenti.

I commenti del thread HN sono di natura più generale e non sembrano descrivere una minaccia specifica per questo schema oltre l'inquietudine generale di Thomas con schemi che evitano l'approccio standard che descrive nel suo commento. Anche se i suoi punti sono ragionevoli, questo non vuol dire che lo schema di Django sia rotto, più che ci siano dei compromessi.

    
risposta data 27.06.2015 - 23:16
fonte

Leggi altre domande sui tag