Я разрабатываю веб-сайт, на котором пользователи решают головоломки так быстро, как только могут. JavaScript используется для каждой головоломки, а количество миллисекунд отправляется на сервер через AJAX, когда головоломка завершена. Как я могу гарантировать, что время, полученное сервером, не было подделано пользователем?
Я не думаю, что токен аутентификации на основе сеанса (вид, используемый для форм в Rails) достаточно, потому что мне нужно аутентифицировать источник значения, а не только легитимность запроса.
Есть ли способ криптографически подписать запрос? Я не могу думать ни о чем, что не может быть воспроизведено хакером. Является ли какой-либо JavaScript, по его воздействию, на стороне клиента, подверженным фальсификации? Должен ли я использовать что-то, что компилируется, как Flash? (Yikes.) Или есть какой-то способ скрыть секретный ключ? Или что-то еще, о чем я не думал?
Обновление. Чтобы уточнить, я не хочу наказывать людей медленными сетевыми подключениями (и скорость сети должна считаться несовместимой), поэтому время должно быть 100% на стороне клиента (таймер запускается только тогда, когда мы знаем пользователь может увидеть головоломку). Кроме того, есть деньги, поэтому нет "доверия к пользователю".