Рекомендации по балансировке скорости и безопасности работы с вредоносными данными
Привет,
Я пишу протокол связи между игровым клиентом и серверным приложением. Я написал несколько методов для построения пакета из полученной строки.
std::map<int, PacketType> packetRegistry
:PacketPlayerMove имеет идентификатор 0
PacketPlayerChat имеет идентификатор 1
Так что если
0,ab12cd34ef56ab78,100,0,250
принимается от клиента, это идентификатор пакета 0 и, следовательно, PacketPlayerMove. Остальные аргументы передаются конструктору в виде std::vector<string>. Это приводит к созданию PacketPlayerMove с идентификатором игрока ab12-cd34-ef56-ab78 в местоположении (100, 0, 250) в 3D-пространстве, и это передается другим игрокам для перемещения соответствующей модели игрока в мире.Однако, естественно, я не могу доверять полученной строке, чтобы она не была вредоносной. Я уже реализовал проверку, чтобы убедиться, что идентификатор пакета находится в packetRegistry, но я не уверен, стоит ли мне беспокоиться о проверке количества параметров, длины, типов данных, возможно, регулярных выражений для формата и т. д., В случае получения чего-то неприятного, например огромной строки, которая может привести к сбою сервера. Как бы вы посоветовали мне справиться с этим?
Что я уже пробовал:
------------------------------------------------------------
KarstenK
"Безопасность превыше всего" - это всегда первое соображение ;-)