Voglio creare un sito web di sondaggi. Un client richiede di rispondere al sondaggio usando POST
e il server risponde con i candidati. Il client invia quindi un POST
con le informazioni del candidato e il vincitore al server, che quindi memorizza le informazioni. Voglio impedire a un cliente di manipolare i risultati inviando ripetutamente il proprio voto al server. Un modo in cui pensavo fosse:
- Il client richiede di votare nel sondaggio.
- Server invia una lista di candidati, data / ora e un hash salato creati utilizzando i candidati e il timestamp. Il server quindi memorizza l'hash.
- Il cliente sceglie un candidato e rimanda il vincitore con la lista dei candidati, il timestamp e l'hash salato.
- Il server calcola l'hash con lo stesso sale e controlla se l'hash è un hash valido come memorizzato nel database. Se l'hash è valido, onora il voto. In caso contrario, silenziosamente non riesce a evitare di avvisare l'utente malintenzionato o risponde con un errore.
Voglio trovare un modo più elegante per farlo anche se. Innanzitutto, ho problemi a pensare a un sale che non è statico. Non voglio che l'utente sia limitato dall'indirizzo IP, quindi non può essere incluso nel sale. Dopo non riesco a pensare a un buon modo di salare il mio hash.
In secondo luogo, voglio trovare un modo per non dover memorizzare le informazioni sul server. Se potessi creare un metodo di validazione che possa essere calcolato rapidamente anziché memorizzato, sarebbe meglio (a meno che l'archiviazione non sia definitivamente migliore del computing perché potrebbe essere più veloce?).
In terzo luogo, dovrei fallire silenziosamente o informare esplicitamente il cliente di un errore?