После моего вопроса Вот, Я пытаюсь реализовать какой-то синтаксический анализ сообщений на сервере.
В настоящее время сообщение выглядит так:
int _header_signature;
int _offset_a;
int _offset_b;
int _size_a;
int _size_b;
wchar_t stuff[_size_a];
wchar_t stuff2[_size_b];
int _footer_signature;
Я мог бы получить некоторый код, который работает, расшифровав заголовок и размеры и узнав, получил ли я все сообщение или есть еще ожидающие. Но что мешает злонамеренному пользователю преднамеренно изменить эти сообщения и разбить мою машину? Например. изменив одно из значений размера или смещений на нечто большее, чем мое сообщение.
Как сделать мой сервер безопасным и устойчивым к любому полученному сообщению?
Ничего такого. Вы должны проверить полученные данные.
Конечно, вы можете / должны шифровать данные, передаваемые по сети, для защиты от атак посредников, но это не мешает кому-то просто отправлять вам ненужные данные.
Так что вам придется проверить, являются ли данные мусором. Если смещения указывают вне сообщения, то происходит что-то подозрительное, и вам придется с этим справиться.
Просто сериализуйте данные http://en.wikipedia.org/wiki/Serialization
и затем проверьте, что смещения действительны.