2013-03-18 1 views
2

Я пишу встроенную программу C, которая обменивается данными с использованием HTTP. У меня это работает, но я не много делал с сетью раньше и просто хотел убедиться, что я не делаю никаких действительно плохих предположений.ВСЕГДА безопасно предположить, что HTTP-пакет с текстом/* никогда не будет иметь « 0»?

Можно ли с уверенностью предположить, что любой не вредоносный HTTP-пакет, имеющий Content-Type text/<something>, не будет иметь в нем нуль? В моем коде есть довольно много мест, которые полагаются там, только «\ 0» в конце строки. У меня есть некоторые меры защиты, которые всегда будут останавливаться после данной Content-Length и никогда не будут переполнять буфер, в который я пишу, но я хотел бы убедиться, насколько это возможно, что материал низкого уровня работает, потому что Я не смогу обновить эти части после их отправки.

Кроме того, может ли кто-нибудь указать мне на любые ресурсы, которые имеют общие gottchas в сетевом программировании?

ответ

7

Нет, это не безопасное предположение, даже если вы можете гарантировать соответствие сообщений. Например, текст UTF-16 почти наверняка будет содержать байты NUL.

Кроме того, плохо сконфигурированный веб-сервер, которого много, возможно, может служить gzip-данными, даже если ваш клиент не принимает его.

+0

Хороший контрпример, UTF-16 и -32 проскользнули у меня в голове. –

+0

Я боялся этого. Спасибо за быстрый ответ. – Azdle

4

Нет, это не безопасное предположение.

Всегда предполагайте, что произвольный вход вредоносно искажен.

4

Нет, это определенно не безопасно предположить.

Невозможно узнать, что пользователь даже использует веб-браузер. Злоумышленник может написать приложение, которое отправляет произвольные данные в ваше приложение, похожее на то, что оно происходит из веб-браузера, но затем отправляет нулевой символ, чтобы свернуть вашу программу (или, что еще хуже, использовать переполнение буфера).

Не доверяйте данным пользователя!

Наличие высокого стандарта безопасности особенно важно для программирования встроенных устройств, поскольку программное обеспечение на этих устройствах обычно сложно обновить, когда обнаружена уязвимость после их отправки.

+0

Я вроде как понял, что это будет ответ. Теоретически эти устройства никогда не должны получать какие-либо незапрошенные пакеты, как они есть в сотовой сети, и, предположительно, имеют свой собственный NAT, и они будут только делать запросы на наши серверы. Возможность обновления является причиной того, что мы делаем как можно больше в Lua, и я действительно пытаюсь убедиться, что материал, который должен быть c, так же хорош, как я его делаю. – Azdle

+0

А как насчет искажения данных ... встроенное устройство может быть подвержено воздействию электромагнитных помех, солнечной радиации и т. Д. – ydroneaud

Смежные вопросы