几年前就讨论过C中内存管理薄弱的问题。有人试图反驳,说现代各种操作系统或运行时平台的进步已经针对内存管理的风险提供了各种保护,比如地址空间随机化,Valgrind等各种工具可以发现内存访问bug,大大削弱了水平的危险。我强烈建议您重新阅读该讨论。我的观点——当时和现在——是C不适合编写安全关键程序,任何缺乏内存检查机制的编程语言都不适合。很简单,就是不合适。他们应该仅限于编写一些小的核心系统,至少小到可以通过一些常规方法(经过验证的方法)进行检查,所有其他的,包括所有应用程序逻辑,应该以受控代码(例如C#、Java或其他,我没有偏好)。Heartbleed是缺乏边界检查的另一个例子。它不能被像Valgrind这样的工具检查,因为它不是一个普通的触发动作——它需要是一种恶意行为或足够智能的测试协议才能发现它(很难,很难)。事实上,没有一个程序员聪明到可以编写出完全避免像Heartbleed这样的bug的程序。毕竟,程序员学习和编码的重点是他们程序的逻辑。在没有边界检查的编程语言中,逻辑可能会出错,因为计算机可以访问和执行任意内存内容,这与程序中的代码和变量无关。所有没有边界检查的编程语言都将计算机的多个维度暴露给程序,如果你认为你比OpenSSL开发团队更擅长处理这种情况,那你就是在自欺欺人。我们无法避免软件中的错误,但我们可以阻止这些看似无穷无尽的错误的源头。正因为如此,我们的互联网很久以前就遭受了Morris蠕虫病毒的侵袭。现在,2年的时间,全球70%的互联网流量已经暴露,代价惨重。如果我们不阻止这个来源,我们将来会失去更多。英文原文:TheHeartbleedBug翻译链接:http://www.vaikan.com/c-vulnerabilities/
