Несколько вещей, на которые стоит обратить внимание.
Во-первых, запросы вашего сервера на что-то вроде этого должны быть POST, а не GET. Только GET-запросы должны быть идемпотентными, и в противном случае является нарушением спецификации HTTP .
Во-вторых, здесь вы видите классическую проблему доверия клиентов . У вас есть , чтобы доверять клиенту при отправке на сервер результатов или другой информации об игровом интервале, но вы не хотите, чтобы клиент отправлял неверные данные. Предотвратить недопустимые действия легко, но предотвращение нечестных данных в действии позволено гораздо более проблематично.
Бен С. замечательно рассказывает о том, как вы разрабатываете протоколы связи между клиентом и сервером, как это. Разрешить отправку значений точек в качестве доверенных данных, как правило, будет плохой идеей. Желательно указать, что действие имело место, и позволить серверу выяснить, сколько очков следует назначить, если оно вообще есть. Но иногда вы не можете обойти это. Рассмотрим сценарий гоночной игры. У клиента есть для отправки времени пользователя, и его нельзя абстрагировать в какой-либо другой вызов, такой как "completeLevelFour". Так что ты сейчас делаешь?
Подход с использованием жетонов, предложенный Ахметом и Дином, является разумным, но не идеальным. Во-первых, токен still должен быть передан клиенту, что означает, что он может быть обнаружен потенциальным злоумышленником и может быть использован злонамеренно. Кроме того, что если ваш игровой API должен быть без сохранения состояния? Это означает, что аутентификация токена на основе сеанса отключена. И теперь вы попадаете в глубокие, темные недра проблемы доверия клиентов.
Мало что можно сделать, чтобы он был на 100% надежным. Но вы можете сделать это очень неудобным чтобы обманывать. Рассмотрим модель безопасности Facebook (каждый запрос API подписан). Это очень хорошо и требует от злоумышленника на самом деле копаться в коде на стороне клиента, прежде чем он сможет понять, как подделать запрос.
Другой подход - воспроизведение сервера. Как и в гоночной игре, вместо того, чтобы просто отправлять на сервер значение «время», есть контрольные точки, которые также записывают время и отправляют их все. Установите реалистичные минимумы для каждого интервала и проверьте на сервере, что все эти данные находятся в установленных пределах.
Удачи!