我正在编写一个使用HTTP进行通信的嵌入式C程序。我已经有了它的工作,但我之前没有做太多的网络,只是想确保我没有做出任何非常糟糕的假设。
我可以安全地假设任何内容类型为text/<something>
的非恶意HTTP数据包都不会为零吗?我的代码中有很多地方只依赖于字符串末尾的'\ 0'。我确实有一些保护措施,它会在给定的Content-Length之后一直停止,并且永远不会溢出我写入的缓冲区,但是我想尽可能地确保低级别的东西有效,因为一旦这些设备出货,我将无法更新这些部件。
此外,有人能指出我在网络编程中有任何共同的资源吗?
答案 0 :(得分:7)
不,即使您可以保证消息符合要求,这也不是一个安全的假设。例如,UTF-16文本几乎肯定包含NUL字节。
此外,即使您的客户不接受gzip数据,配置不当的Web服务器也可能会提供充足的服务。
答案 1 :(得分:4)
不,这不是一个安全的假设。
始终假设任意输入被恶意格式化。
答案 2 :(得分:4)
不,这绝对是不安全的假设。
您无法知道用户甚至使用网络浏览器。攻击者可以编写一个应用程序,它向您的应用程序发送任意数据,看起来它来自Web浏览器,但随后发送一个空字符使程序崩溃(甚至更糟:利用缓冲区溢出)。
绝不信任用户数据!
具有高安全标准对于嵌入式设备编程尤为重要,因为这些设备上的软件在发货后检测到漏洞时通常很难更新。