C编程中十大危险错误?


2

C编程中最主要的危险错误是什么?

例如,使用strcpy会导致堆栈溢出和代码注入。

我在C.

寻找至少10个不好的编程模式
  0

不知道你在做什么是No.1。作为一个不好的主观标志关闭。 09 8月. 132013-08-09 09:00:20

+2

我正在寻找C中十大风险错误?你想知道更多什么?我是C开发人员,我想避免他们。 09 8月. 132013-08-09 09:20:55

  0

我的列表http://www.andromeda.com/people/ddyer/topten.html 11 8月. 132013-08-11 03:13:39

1

我认为,学习这个问题的答案的最好方法是阅读大量的书并做最好的练习。我建议你这本书Secure Coding in C and C++所有关于安全编码的话题。


1

你可以看看CWE/SANS Top 25 Most Dangerous Software Errors。这是一般的软件开发(独立于编程语言),但也包括在C/C++中发生的错误。


4

在C编程中最高的危险错误是使用C。这是一个不受欢迎的主张,但几十年的经验给我留下了深刻的印象。

C是一个很好的编程语言,它可以让你表达一个“抽象机”操作(这是C标准是如何把它),这将得到有效地翻译成机器代码(翻译工具跑得快结果很快)。然而,这种翻译价格昂贵,即他们不能保证出现错误,并且潜伏在阴影中的“未定义行为”很多。例如,几乎从来没有正确理解过,因此当使用更新的编译器或激活优化开关时,导致看起来不错的代码会失败(有时会以创建可利用的漏洞的方式)。

寻找“错误列表”是错误的思维方式。你想要一个黑名单:要避免的事情,假设“其他”是安全的。你应该想要一个白名单:一个允许列表的方式来开发,排除其他的一切。成功的C程序员是程序员,他们能够保持自己的纪律从来没有使用任何他们不从端到端掌握的构造;通过“掌握”我的意思是描述C编译器如何将其转换为汇编操作码的能力,包括C编译器允许进行的所有可能的优化。

“用C”的一个好方法是编写一个或两个例程这确实需要一些优化的C速度和更安全的语言代码的其余部分,这将允许更快,更容易,安全开发(例如Python,C#,Node.js,Perl ...选择很大)。