L'idea migliore qui è come altri dichiarati, usa i token CSRF. La forma più semplice è quella di aggiungere l'indirizzo IP dell'utente come identificatore in un database e quindi aggiungere un valore casuale per questo IP. Il valore casuale è il token corretto.
Ad esempio, quando qualcuno visita la tua pagina per ottenere il modulo, porta l'IP dell'utente, diciamo:
12.12.12.12.
Aggiungi in un database di valori-chiave con valore casuale:
12.12.12.12 = ljghsdlghdlghdlshsdflgd (nota, NON usare l'esempio "ljghsdlghdlghdlshsdflgd", invece genera un valore pseudo-casuale di una lunghezza sufficiente)
Aggiungi questo valore pseudo-casuale come campo nascosto.
Al momento dell'invio, utilizza l'indirizzo IP dell'utente per cercare la risposta suggerita. Se la risposta effettiva corrisponde alla risposta suggerita, la richiesta viene accettata.
In QUALUNQUE tentativo di invio (indipendentemente dal successo o meno), eliminare il record nel database, se esiste. Ciò significa che qualsiasi tentativo CSRF invaliderà i token reali per l'utente target e ogni token sarà di tipo monouso. A seconda del tipo di database, è semplice come impostare la chiave su "" o semplicemente cancellarlo.
Come:
12.12.12.12="".
Una buona idea è anche quella di scadere di questi valori in base al tempo, sia per motivi di sicurezza, sia per eliminare dati non necessari nel database. A seconda che si tratti di un forum, può essere saggio avere un paio d'ore come tempo di validità, mentre se è un semplice modulo per dire, cambia una password, quindi è sufficiente per circa 5 minuti come tempo di validità.
Un'altra idea è captcha, che impedisce anche attacchi automatici lato client, come infezioni da virus e trojan di controllo remoto automatizzati. A seconda della sensibilità dell'applicazione Web, può essere una buona idea utilizzare i token Captcha AND CSRF all'unisono. Non seguire il consiglio di utilizzare lo stesso token per un'intera sessione, è una cattiva idea per quanto riguarda la sicurezza poiché esiste una piccola possibilità che l'utente possa essere indotto a inviare un token a un utente malintenzionato e al sito. Un token monouso sarà privo di difetti per l'attaccante, ma un token multiuso può essere pericoloso quanto una sessione, che CSRF è progettato per proteggere.
Quindi usa i token monouso, è la migliore sicurezza rispetto ai token multiuso, e anche i token monouso non devono essere protetti in transito come suggerito dall'articolo CSRF in una delle altre risposte.