假设带有'text / *'的HTTP数据包永远不会有'\ 0',总是安全的吗?

时间:2013-03-18 15:38:32

标签: c http network-programming c-strings

我正在编写一个使用HTTP进行通信的嵌入式C程序。我已经有了它的工作,但我之前没有做太多的网络,只是想确保我没有做出任何非常糟糕的假设。

我可以安全地假设任何内容类型为text/<something>的非恶意HTTP数据包都不会为零吗?我的代码中有很多地方只依赖于字符串末尾的'\ 0'。我确实有一些保护措施,它会在给定的Content-Length之后一直停止,并且永远不会溢出我写入的缓冲区,但是我想尽可能地确保低级别的东西有效,因为一旦这些设备出货,我将无法更新这些部件。

此外,有人能指出我在网络编程中有任何共同的资源吗?

3 个答案:

答案 0 :(得分:7)

不,即使您可以保证消息符合要求,这也不是一个安全的假设。例如,UTF-16文本几乎肯定包含NUL字节。

此外,即使您的客户不接受gzip数据,配置不当的Web服务器也可能会提供充足的服务。

答案 1 :(得分:4)

不,这不是一个安全的假设。

始终假设任意输入被恶意格式化。

答案 2 :(得分:4)

不,这绝对是安全的假设。

您无法知道用户甚至使用网络浏览器。攻击者可以编写一个应用程序,它向您的应用程序发送任意数据,看起来它来自Web浏览器,但随后发送一个空字符使程序崩溃(甚至更糟:利用缓冲区溢出)。

绝不信任用户数据!

具有高安全标准对于嵌入式设备编程尤为重要,因为这些设备上的软件在发货后检测到漏洞时通常很难更新。