2013-03-18 111 views
2

我在寫一個使用HTTP進行通信的嵌入式C程序。我已經掌握了它的工作原理,但之前我並沒有在網絡方面做過很多工作,只是想確保我沒有做出任何錯誤的假設。假設一個帶有'text/*'的HTTP包永遠不會有' 0'是否總是安全的?

我可以安全地假設內容類型爲text/<something>的任何非惡意HTTP數據包都不會有零嗎?我的代碼中有很多地方只依賴字符串末尾的'\ 0'。我確實有一些保護措施會在給定的Content-Length之後始終停止,並且永遠不會溢出我正在寫入的緩衝區,但我想盡可能確保低級別的內容正常工作,因爲一旦這些設備出貨,我將無法更新這些部件。

另外,任何人都可以指向我的任何資源,在網絡編程中有共同的gottchas?

回答

7

不,這不是一個安全的假設,即使您可以保證消息符合。例如,UTF-16文本幾乎肯定會包含NUL個字節。

此外,配置不良的網絡服務器,其中有很多,可以想象,即使您的客戶端不接受它,也可以提供gzip數據。

+0

很好的反例,UTF-16和-32滑倒我的腦海。 – 2013-03-18 15:42:27

+0

我很害怕這個。感謝您及時的回覆。 – Azdle 2013-03-18 15:45:39

4

不,這不是一個安全的假設。

始終假定任意輸入的惡意格式不正確。

4

不,這絕對是不是安全地假設。

您無法知道用戶甚至使用網絡瀏覽器。攻擊者可以編寫一個應用程序,它嚮應用程序發送任意數據,看起來像是源自Web瀏覽器,但隨後發送一個nul字符來使程序崩潰(甚至更糟糕:利用緩衝區溢出)。

絕不信任用戶數據!

對於嵌入式設備編程而言,擁有高安全性標準尤其重要,因爲這些設備上的軟件在發貨後檢測到漏洞時通常很難更新。

+0

我有點想到這將是答案。從理論上講,這些設備絕不應該得到任何未經請求的數據包,因爲它們在蜂窩網絡上,並且應該有自己的NAT,並且它們只會向我們的服務器發出請求。更新能力是我們儘可能在Lua中做的原因,我真的試圖確保需要c的東西和我做的一樣好。 – Azdle 2013-03-18 15:51:53

+0

數據損壞怎麼辦?嵌入式設備可能會受到EMI,太陽輻射等的影響。 – ydroneaud 2013-03-18 16:50:41

相關問題