Come generare Generate Hash incorporando il timestamp in modo che possa essere non modificato per ottenere il timestamp quando è stato generato?

1

Voglio creare un hash basato su un ID casuale, che deve essere valido per soli 15 minuti. C'è un modo per farlo?

Lo sto utilizzando per l'invio di moduli. Se qualche modulo inviato sconosciuto o qualcuno presentato dopo 15 minuti dovrei essere in grado di capire quando è stato creato?

Sto memorizzando l'ID casuale in sessione e quando l'utente invia il modulo voglio decrittografarlo e corrispondere con l'id originale. Se corrisponde ed è in 15 minuti o tempo creato, aggiungerò quel valore al database, dopo aver fatto alcune convalide.

    
posta nikunjM 16.07.2015 - 00:17
fonte

2 risposte

3

È una parte di informazioni multipartente che devi comunicare.

Prima di tutto, fornisci il timestamp. Questo è ciò contro cui si è convalidato per "è stato presentato entro 15 minuti". In secondo luogo, hai un hash del timestamp con alcuni salt aggiuntivi. Il sale è noto solo a te (sul server).

Se il timestamp è stato modificato, l'hash del timestamp modificato + sale non corrisponderebbe al timestamp inalterato invariato + sale e si rifiuterebbe l'invio del modulo.

Questo apparirebbe come:

<form ...>
<input type="hidden" name="timestamp" value="2015.07.15.22:17" />
<input type="hidden" name="timehash" value="9BC54D13B43D456D9167DA13F2E8351B" />
...
</form>

Ora convalida il timestamp. Se controlli l'hash md5 della stringa 2015.07.15.22:17somesalt lo troverai per abbinare il md5 sum 9BC5... . E quindi sai che il timestamp è valido. Se il timestamp non corrisponde all'hash (con il sale conosciuto), è stato manomesso.

Devo sottolineare che somesalt non deve essere una costante per tutte le pagine generate. Potrebbe essere un numero casuale generato per ogni sessione utente (e quindi persiste). Solo che si tratta di informazioni segrete mantenute e coerenti per questa sessione utente.

    
risposta data 16.07.2015 - 00:22
fonte
0

C'è un modo standard per farlo chiamato TOTP . Fondamentalmente un metodo per cancellare un intervallo nel tempo (di solito ora - > ora + t) invece di solo un tempo di scadenza (ora + t).

Utilizzato da Google, Facebook, Microsoft, GitHub, ecc. ecc. per l'autenticazione a due fattori, di solito un breve insieme di numeri valido per 30 secondi circa, ma lo stesso principio può essere utilizzato per qualsiasi intervallo di tempo.

Ci sono implementazioni disponibili in molte lingue, o la descrizione su Wikipedia dovrebbe probabilmente essere sufficiente per implementarlo da solo, se lo desideri.

    
risposta data 07.11.2016 - 21:31
fonte

Leggi altre domande sui tag