2

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

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

另外,谁能指出我在网络编程中有共同问题的任何资源?

4

3 回答 3

7

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

此外,即使您的客户端不接受,配置不佳的 Web 服务器(其中有很多)也可能会提供 gzip 数据。

于 2013-03-18T15:42:02.653 回答
4

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

始终假设任意输入是恶意格式错误的。

于 2013-03-18T15:41:31.257 回答
4

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

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

永远不要相信用户数据!

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

于 2013-03-18T15:44:13.940 回答