如何编写安全的c网络软件?

时间:2012-03-29 16:28:13

标签: c

由于特定原因,我需要用C开发一个迷你Web服务器(运行Debian)。

由于我的应用程序很可能完全从互联网上使用,我希望获得一些保护此类应用程序的技巧。

更一般地说,我对如何在C中开发安全软件感兴趣。

非常感谢。

2 个答案:

答案 0 :(得分:3)

一个好的答案太大了,不适合这个小盒子。

所以简短的回答是开始阅读一本书以了解这个过程是如何运作的:

Exploiting Software: How to Break Code

答案 1 :(得分:3)

很难。

C中的两个最大问题是缓冲区溢出和双重释放,其中任何一个都可以让攻击者能够在您的系统上运行不受信任的代码。所以,第一件事,防守代码!始终检查数组边界,永远不要使用获取,并确保您可以在视觉上匹配所有释放与mallocs。事实上,如果可以的话,使用像boehm这样的保守GC,这样你根本就不需要自由。然后使用像Valgrind这样的工具来分析你的程序,并希望找到你忘记的东西。

然后,由于您正在编写Web服务器,因此您可能正在运行setuid(如果您想要侦听端口< 1024),这也非常危险,因为它会让任何闯入您的程序根目录的人。因此,作为不受信任的用户,在分叉进程中尽可能多地运行系统。这是下一层安全保护,即使你的程序有漏洞利用,它也可以保护你。(/ p>

另外,测试测试!一种重要的安全测试是“模糊测试” - 向您的程序发送随机输入,看看会发生什么。如果你的程序有段错误,你可能会有一个可利用的错误。