用C语言写的程序不安全

关于C语言内存管理薄弱的问题几年前我们就讨论过。有人试图反驳,说现代各种操作系统或runtime平台的进步,对内存管理的风险提供了各种保护,比如地址空间随机化,还有各种诸如Valgrind这样的工具可以发现内存访问bug,大大削弱危险程度。我十分推荐大家重新阅读一下那次讨论。

我的观点——当时和现在——都是C语言不适合用来写安全性要求高的程序,任何缺乏内存检查机制的编程语言都不适合。很简单,就是不适合。它们应该仅限于用来写一些小的核心系统,最好是小到可以用一些常规的方法(被证明的方法)进行检查,所有其它的,包括全部应用逻辑,都应该用受控代码实现(例如C#,Java或其它的,我没有偏向)。

心脏出血就是这种缺乏边界检查造成的结果的另一个例子。它无法被Valgrind这样的工具检查出,因为它不是普通的被触发的动作——它需要是一种恶意的行为或是一种足够智能的测试协议才能发现(很难很难)。

事实上,没有哪个程序员能够聪明到可以写出完全避免心脏出血这样的bug的程序。毕竟,程序员的学习和编码关注的是他们的程序的逻辑。在没有边界检查机制的编程语言里,逻辑可能会走错路,因为计算机可以访问和执行任意内存内容,这些内容是和你的程序里的代码和变量是没关系的。所有没有边界检查的编程语言将计算机的多个维度暴露给程序,如果你觉得自己比OpenSSL开发团队强、能很好的处理这种情况,那是自欺欺人。

我们无法在软件中避免bug的存在,但我们可以堵住这些看起来无穷无尽的bug的源头。因为它,很早之前我们的互联网就遭受了Morris蠕虫病毒的危害。现在,2年的时间里,世界70%的互联网流量都暴露无疑,代价惨重。如果不堵住这源头,以后会让我们损失更多。

[英文原文:The Heartbleed Bug ]
分享这篇文章:

11 Responses to 用C语言写的程序不安全

  1. 独行猫儿 says:

    能不要乱翻译么?看起来就像是个搞林木开采的厨师在这讨论编程似的,好蠢。

  2. isno says:

    跟语言没关系,跟程序员的安全意识有关系,
    java安全吗?struts2漏洞害死了多少网站?

  3. eagle says:

    你是说我们总会有一次早上起床出门后忘了关门,所以以后一律改爬窗户了?

  4. MR.Luo says:

    不好意思啊,WINDOWS和LINUX等系统都是C写的,你要说C不安全,既然底层已经不安全了,上面还谈什么安全。

  5. 回访国航房管局 says:

    C都敢黑,吃了熊心豹子胆了

  6. 流苏 says:

    你怎不说汇编不安全呢!

  7. 裤衩 says:

    开脱… 借口,

  8. ... says:

    看看楼上这些评论。。。再看看hackernews人家的评论。。啥也不懂还卖乖,文章虽然是翻译的

  9. 环形山 says:

    上面某些评论。。。人家说不安全起码摆明了观点说明了理由,你们这些反驳的,一点道理没写出来

  10. leon says:

    ….这是什么….?怎么全是乱码,看不见哦

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据