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

如何编写安全的c网络软件?,c,C,出于特定的原因,我需要用运行Debian的C语言开发一个小型web服务器 由于我的应用程序可能完全是从互联网上使用的,因此我希望能提供一些技巧来保护这种类型的应用程序 更一般地说,我对如何用C语言开发安全软件的所有相关内容都感兴趣 非常感谢。一个好的答案太大了,放不下这个小盒子 因此,简单的答案是开始阅读一本书,了解这个过程是如何工作的: 困难重重 C语言中最大的两个问题是缓冲区溢出和双重释放,这两个问题都可能使攻击者能够在您的系统上运行不受信任的代码。所以,第一件事,防御性编码!始终检查数组边

出于特定的原因,我需要用运行Debian的C语言开发一个小型web服务器

由于我的应用程序可能完全是从互联网上使用的,因此我希望能提供一些技巧来保护这种类型的应用程序

更一般地说,我对如何用C语言开发安全软件的所有相关内容都感兴趣


非常感谢。

一个好的答案太大了,放不下这个小盒子

因此,简单的答案是开始阅读一本书,了解这个过程是如何工作的:

困难重重

C语言中最大的两个问题是缓冲区溢出和双重释放,这两个问题都可能使攻击者能够在您的系统上运行不受信任的代码。所以,第一件事,防御性编码!始终检查数组边界,不要使用GET,并确保可以直观地将所有空闲与malloc匹配。事实上,如果可以的话,使用一个保守的GC,比如boehm,这样你就不需要自由了。然后使用像Valgrind这样的工具来分析你的程序,希望能找到你忘记的东西


然后,由于您正在编写一个Web服务器,如果您想在端口上侦听,您可能正在运行setuid。这是一个非常重要的主题。因此,这是针对小型特定的重点问题。所有现有的web服务器都有什么问题?问题很简单,这很好,但很难用Stackoverflow的格式回答,因为它不是非常集中。问题是,最流行的web服务器完全尊重标准和IETF。对于我的工作,我不得不偏离标准。我希望我能投票来回答这个问题。这是一个非常有用的问题。令人遗憾的是,so没有更开放地探索像这样伟大的内容。你的答案很有趣。我承认我对垃圾收集GC的态度不好,觉得它为草率的编码提供了借口。但是,我从来没有为网络服务器编程过,所以我的坏态度可能是一种无用的偏见。如果你想详细说明一下,我很想读一读。垃圾收集肯定有它的优点和缺点。在我看来,主要的缺点是性能——在内存方面,您可以预期使用2倍于其他方式的内存,并且在程序运行时存在不可预测的GC暂停。但就有更好的机会编写正确的程序而言,经验和研究表明,这是一个很大的帮助。如果您不习惯使用垃圾收集语言编写的程序,那么它可能看起来很邋遢。所有权在哪里?但大多数的草率只对内存管理有影响,你不必担心!非常感谢您做出建设性的回应。你的回答真的很有帮助。我也希望那些有固定想法的人,不要完全毁掉我的小名声。@JoshXoder:你很难不把它当成一个新来者,但这个问题确实没有遵循Stackoverflow的惯例。根据Stackoverflow的实践,用户投票否决该问题是正确的,如果有人怀疑他们是否投票否决了您,那么就只有该问题了。