Несколько вещей, на которые следует обратить внимание.
Во-первых, запросы вашего сервера на что-то подобное должны быть POST, а не GET. Только GET-запросы должны быть идемпотентными, и несоблюдение этого фактически является нарушением протокола HTTP. спецификация.
Во-вторых, здесь вы видите классическую проблему доверия клиентов. Вы должны доверить клиенту отправку результатов или другой информации об игровом интервале на сервер, но вы не хотите, чтобы клиент отправлял незаконные данные. Предотвратить запрещенные действия легко, но гораздо сложнее предотвратить нечестную игру данных в разрешенном действии.
Ben S очень хорошо говорит о том, как вы разрабатываете протоколы связи между клиентом и сервером. Разрешить отправку значений точек в качестве доверенных данных, как правило, будет плохой идеей. Предпочтительно указать, что действие имело место, и позволить серверу выяснить, сколько очков должно быть назначено, если вообще. Но иногда вы не можете обойти это. Рассмотрим сценарий гоночной игры. Клиент должен отправить время пользователя, и его нельзя абстрагировать каким-либо другим вызовом, например «completedLevelFour». Так что вы будете делать теперь?
Токеновый подход, предложенный Ахметом и Дином, логичен, но не идеален. Во-первых, токен все еще должен быть передан клиенту, что означает, что он может быть обнаружен потенциальным злоумышленником и может быть использован злонамеренно. Кроме того, что, если ваш игровой API должен быть без сохранения состояния? Это означает, что аутентификация токена на основе сеанса отключена. А теперь вы попадаете в глубокие темные недра проблемы доверия клиентов.
Вы мало что можете сделать, чтобы сделать его на 100% надежным. Но вы можете сделать обман очень неудобным. Рассмотрим модель безопасности Facebook (каждый запрос API подписан). Это очень хорошо и требует, чтобы злоумышленник действительно покопался в коде на стороне вашего клиента, прежде чем он сможет понять, как подделать запрос.
Другой подход — повтор сервера. Как и в гоночной игре, вместо того, чтобы просто отправлять значение «время» на сервер, используйте контрольные точки, которые также записывают время и отправляют их все. Установите реалистичные минимумы для каждого интервала и проверьте на сервере, что все эти данные находятся в установленных границах.
Удачи!
person
Peter Bailey
schedule
16.11.2009