我们无法在软件中避免bug的存在,但我们可以堵住这些看起来无穷无尽的bug的源头
事实上,没有哪个程序员能够聪明到可以写出完全避免心脏出血这 样的bug的程序毕竟,程序员的学习和编码关注的是他们的程序的逻辑在没有边界检查机制的编程语言里,逻辑可能会走错路,因为计算机可以访问和执行任 意内存内容,这些内容是和你的程序里的代码和变量是没关系的所有没有边界检查的编程语言将计算机的多个维度暴露给程序,如果你觉得自己比openssl 开发团队强、能很好的处理这种情况,那是自欺欺人
心脏出血就是这种缺乏边界检查造成的结果的另一个例子它无法被valgrind这样的工具检查出,因为它不是普通的被触发的动作——它需c++程序员要是一种恶意的行为或是一种足够智能的测试协议才能发现(很难很难)
编者注:写程序安不安全跟具体的编程语言无关!
#jetbrains 六折贺新春!intellij idea,pycharm,webstorm,phpstorm 优惠!
[英文原文:the heartbleed bug ]
关于c语言内存管理薄弱的问题几年前我们就讨论过有人试图反驳,说现代各种操作系统或runtime平台的进步,对内存管理的风险提供了各种保护,比如地址空间随机化,还有各种诸如valgrind这样的工具可以发现内存访问bug,大大削弱危险程度我十分推荐大家重新阅读一下那次讨论因为它,很早之前我们的互联网就遭受了morris蠕虫病毒的危害c++历史起源现在,2年的时间里,世界70%的互联网流量都暴露无疑,代价惨重如果不堵住这源头,以后会让我们损失更多
我的观点——当时和现在——都是c语言不适合用来写安全性要求高的程序,任何缺乏内存检查机制的编程语言都不适合很简单,就是不适合它们应该仅 限于用来写一些小的核心系统,最好是小到可以用一些常规的方法(被证明的方法)进行检查,所有其它的,包括全部应用逻辑,都应该用受控代码实现(例如 c#,java或其它的,我没有偏向)