Безопасность сетевого сервиса: размер сетевого сообщения должен быть известен? - PullRequest
0 голосов
/ 17 июля 2010

Сервер / клиентское приложение обмениваются данными друг с другом, используя данные в формате XML, используя соединение TCP. Это потрясающе, поскольку мне не нужно беспокоиться о сериализации / десериализации сложных данных.

Чтобы разрешить получение данных XML, я добавляю длину документа XML (в байтах) к данным, отправляемым через сетевой сокет; таким образом, принимающее приложение знает, сколько данных прочитано, прежде чем оно сможет десериализовать данные в формате XML.

Теперь я пытаюсь представить возможные дыры в безопасности в клиент-серверном приложении, которое использует такую ​​структуру сообщений.

Помимо проблем, в основном связанных с транспортируемыми данными, я думаю, что данные в формате XML защищают сервер от вредоносных сообщений. Не так ли? Если ответ верный, остается только один вопрос: что произойдет, если злонамеренный клиент отправит мне сообщения, объявляющие огромный размер сообщения (путем изменения целого числа, вставленного в начало сообщения).

Результатом будет DOS, поскольку на простом сервере процесс очень очень большого (легального) сообщения ...

Можно ли избежать информации о «размере сообщения»? Как я могу предотвратить DOS-атаку?

1 Ответ

0 голосов
/ 17 июля 2010

Сетевой уровень не позволит вам прочитать больше данных, чем доступно - вызовы recv будут заблокированы.Так что да, в зависимости от вашей реализации это может вызвать DOS.

Используйте , выберите , если вы этого еще не сделали.Вы можете передать список клиентов на select, и функция вернет клиента, готового к приему.Таким образом, вредоносные клиенты не смогут заблокировать сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...