È 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.