Последствия для безопасности JsonUtility и как обеспечить безопасность, если нет

#c# #unity3d #security #serialization #multiplayer

#c# #unity3d #Безопасность #сериализация #Многопользовательский режим

Вопрос:

Я разрабатываю многопользовательскую игру, используя Unity и библиотеку C# .NET для связи по протоколу TCP. Мне нужен простой способ передачи данных в форматированном виде по сети между сервером и клиентом.

Я знаю, что JSON раздут для сетевой связи, однако использование утилиты JSON Unity для сериализации и десериализации классов ClientCommand и ServerResponce очень удобно.

Моя проблема в том, что я, очевидно, буду запускать неавторизованный ввод данных клиента JSONUtility.FromJsonlt;ClientCommandgt;(receivedJsonData); . Я думаю, что это, скорее всего, будет проблемой безопасности в моем приложении.

Имеет ли JsonUtility встроенную защиту? Я ничего не нашел о его безопасности в Интернете.

Если небезопасно, есть ли лучший способ сериализации / десериализации ненадежных данных JSON, которые являются безопасными, или можно каким-то образом обезопасить функциональность JSON?

Комментарии:

1. Разве вы не используете сетевой код для игровых объектов или UNet? я бы подумал, что любой из них инкапсулировал бы для вас такие вещи эффективным способом (с использованием двоичных полезных нагрузок), а не самостоятельно?

2. Что вы подразумеваете под неуверенностью? Это может не сработать, если формат неправильный, да .. но я почти уверен, что вы не можете просто ввести в него что-то, как в BinaryFormatter «нет»…. Однако, вероятно, лучшим вариантом как для безопасности, так и для пропускной способности было бы вообще не использовать строки, а скорее реализовать двоичный протокол для преобразования вперед и назад между вашими типами и byte[]

3. @MickyD Игра, которую я разрабатываю, требует гораздо более минимальной сети, чем оба решения Unity, так как сетевой код для игровых объектов все еще находится на стадии разработки, и у меня также нет опыта работы с ним, что является проблемой, поскольку я нахожусь в крайнем сроке. В этом случае написание моего собственного решения имеет смысл.

4. У вас истекает крайний срок, и вы решили запустить свою собственную многопользовательскую систему?

5. @MickyD Сначала звучит глупо, но я думаю, что это многопользовательское решение не может быть перенесено в другие проекты, такие как UNet, например, оно построено с учетом этого одного проекта со всеми командами, жестко закодированными в коде решений. Плюс, к счастью для меня, мой крайний срок установлен сам по себе, так как этот проект предназначен не для клиента или работы, а просто для хобби, которое я не хочу затягивать.