Как запретить игровому клиенту отправлять поддельные ID игрока?
Я пишу игровой клиент / сервер. Я использую Artemis-odb и Netty для управления объектами и сетями. Каждому зарегистрированному игроку присваивается идентификатор автоинкремента из базы данных. Этот идентификатор связан с каждым клиент-серверным событием.
Я хочу, чтобы клиент не мог подделать идентификационный номер клиента, чтобы прекратить захват аккаунта. Теоретически, что является лучшей практикой, чтобы предотвратить это?
Игра / клиент не использует UUID, но может, если это лучший вариант.
Спасибо!
1 ответ
Идентификатор игрока должен быть связан с контекстом сетевого подключения для этого игрока (сокет, если вы используете TCP, или пара IP:PORT, если UDP) на сервере.
Клиенту никогда не нужно отправлять идентификатор обратно на сервер, так как сервер должен знать, что это за идентификатор. Пока сервер может связывать входящие сетевые пакеты с контекстом проигрывателя, практический риск подделки отсутствует, хотя я думаю, что риск может быть немного выше с UDP. Но опять же практический эксплойт был бы маловероятным, если вы включите порядковые номера в пакеты.
Я не знаю ни одной крупной сетевой игры, которая фактически использовала бы полные UUID в качестве идентификаторов игроков в клиент-серверных протоколах.