Задать вопрос
@Viktor_P

Как можно реализовать проверку подлинности данных на игровом сервере?

К примеру, есть некая простая игра по сети, суть которой - кто дальше проедет на машине или, проще говоря, кто наберет больше очков. Для реализации лидерборда данные в любом случае нужно отправлять на сервер. И тут встает вопрос - как реализовать логику, при которой сервер будет понимать, что данные - это действительно результат игры, а не какой-нибудь "левый" запрос отправленный через REST-клиент с накрученными данными?

Есть ли какие-то паттерны, как реализуются в этих случаях сервера?
  • Вопрос задан
  • 435 просмотров
Подписаться 3 Простой Комментировать
Решения вопроса 2
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Шифрование + авторизация + проверка данных на "реальность", т.е. если максимальная скорость машины 100 км/ч, а от клиента приходит результат, что он за секунду проехал 1000км, то тут явно что-то не так. Но даже в таком случае есть шанс, что программу реверснут и будут посылать левые результаты, можно вынести весь игровой процесс на сервер, но, думаю, в вашем случае это не подойдёт. На 100% защититься от читеров в принципе невозможо, ибо есть вероятность, что напишут бота к вашей игре.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Разработка игр
software engineer
1. Процесс отправки результатов должен быть согласован с предыдущими данными.
То есть вы не должны принимать пакет с результатами и сразу в скоребоард. Сперва должен быть пакет, что игрок начал трассу, потом какие-то промежуточные значения, затем уже результат. Для каждого пакета должно быть корректное время создания.

2. Опять же, клиент игры может отправлять дополнительные пакеты с информацией, и желательно регулярно меняться чтобы хакеру было сложно написать "бот", который будет работать вечно.

3. Информация должна шифроваться, алгоритм храниться в секрете. Можно сделать несколько алгоритмов и между ними переключаться, чтобы хакер сломал голову, разбираясь в каком виде он должен слать данные.

4. Логирование действий обязательно. Если есть подозрение, что какой-то клиент шлет некорректные данные (тренируется в написании бота) - можно банить сразу, или можно обсфуцировать бан - делать для такого клиента лаги, глюки и проблемы, чтобы он не понял что происходит, а банить немного погодя, чтобы он не мог вычислить какое именно его действие привело к бану.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
как реализовать логику, при которой сервер будет понимать, что данные - это действительно результат игры

100% защититься невозможно, но возможно сделать так, чтобы взлом стал гораздо дороже, чем выгода. Например, валидация данных в игровом сервере в условной "Flappy Bird" может быть заметно проще, чем GTA.

Очень хорошая и полезная статья Борьба с читерами в онлайн-играх: 22 «нужно» и «нельзя» на Хабре (плюс, важные комментарии). Выберите, какой уровень защиты вам нужен для вашей игры. Например, некоторые способы защиты невозможно сделать одному программисту (слишком долго и дорого).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы