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

Я пишу игровой клиент / сервер. Я использую Artemis-odb и Netty для управления объектами и сетями. Каждому зарегистрированному игроку присваивается идентификатор автоинкремента из базы данных. Этот идентификатор связан с каждым клиент-серверным событием.

Я хочу, чтобы клиент не мог подделать идентификационный номер клиента, чтобы прекратить захват аккаунта. Теоретически, что является лучшей практикой, чтобы предотвратить это?

Игра / клиент не использует UUID, но может, если это лучший вариант.

Спасибо!

1 ответ

Решение

Идентификатор игрока должен быть связан с контекстом сетевого подключения для этого игрока (сокет, если вы используете TCP, или пара IP:PORT, если UDP) на сервере.

Клиенту никогда не нужно отправлять идентификатор обратно на сервер, так как сервер должен знать, что это за идентификатор. Пока сервер может связывать входящие сетевые пакеты с контекстом проигрывателя, практический риск подделки отсутствует, хотя я думаю, что риск может быть немного выше с UDP. Но опять же практический эксплойт был бы маловероятным, если вы включите порядковые номера в пакеты.

Я не знаю ни одной крупной сетевой игры, которая фактически использовала бы полные UUID в качестве идентификаторов игроков в клиент-серверных протоколах.

Другие вопросы по тегам