惊!用 C 语言写的程序不安全
2015-04-22 23:08
302 查看
原文地址:http://developer.51cto.com/art/201404/435484.htm
:写程序的安全性与编程语言本身没有关系!
AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!
关于C语言内存管理薄弱的问题几年前我们就讨论过。有人试图反驳,说现代各种操作系统或runtime平台的进步,对内存管理的风险提供了各种保护,比如地址空间随机化,还有各种诸如Valgrind这样的工具可以发现内存访问bug,大大削弱危险程度。我十分推荐大家重新阅读一下那次讨论。
我的观点——当时和现在——都是C语言不适合用来写安全性要求高的程序,任何缺乏内存检查机制的编程语言都不适合。很简单,就是不适合。它们应该仅 限于用来写一些小的核心系统,最好是小到可以用一些常规的方法(被证明的方法)进行检查,所有其它的,包括全部应用逻辑,都应该用受控代码实现(例如 C#,Java或其它的,我没有偏向)。
心脏出血就是这种缺乏边界检查造成的结果的另一个例子。它无法被Valgrind这样的工具检查出,因为它不是普通的被触发的动作——它需要是一种恶意的行为或是一种足够智能的测试协议才能发现(很难很难)。
事实上,没有哪个程序员能够聪明到可以写出完全避免心脏出血这 样的bug的程序。毕竟,程序员的学习和编码关注的是他们的程序的逻辑。在没有边界检查机制的编程语言里,逻辑可能会走错路,因为计算机可以访问和执行任 意内存内容,这些内容是和你的程序里的代码和变量是没关系的。所有没有边界检查的编程语言将计算机的多个维度暴露给程序,如果你觉得自己比OpenSSL
开发团队强、能很好的处理这种情况,那是自欺欺人。
我们无法在软件中避免bug的存在,但我们可以堵住这些看起来无穷无尽的bug的源头。因为它,很早之前我们的互联网就遭受了Morris蠕虫病毒的危害。现在,2年的时间里,世界70%的互联网流量都暴露无疑,代价惨重。如果不堵住这源头,以后会让我们损失更多。
英文原文:The Heartbleed Bug
译文链接:http://www.vaikan.com/c-vulnerabilities/
:写程序的安全性与编程语言本身没有关系!
AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!
关于C语言内存管理薄弱的问题几年前我们就讨论过。有人试图反驳,说现代各种操作系统或runtime平台的进步,对内存管理的风险提供了各种保护,比如地址空间随机化,还有各种诸如Valgrind这样的工具可以发现内存访问bug,大大削弱危险程度。我十分推荐大家重新阅读一下那次讨论。
我的观点——当时和现在——都是C语言不适合用来写安全性要求高的程序,任何缺乏内存检查机制的编程语言都不适合。很简单,就是不适合。它们应该仅 限于用来写一些小的核心系统,最好是小到可以用一些常规的方法(被证明的方法)进行检查,所有其它的,包括全部应用逻辑,都应该用受控代码实现(例如 C#,Java或其它的,我没有偏向)。
心脏出血就是这种缺乏边界检查造成的结果的另一个例子。它无法被Valgrind这样的工具检查出,因为它不是普通的被触发的动作——它需要是一种恶意的行为或是一种足够智能的测试协议才能发现(很难很难)。
事实上,没有哪个程序员能够聪明到可以写出完全避免心脏出血这 样的bug的程序。毕竟,程序员的学习和编码关注的是他们的程序的逻辑。在没有边界检查机制的编程语言里,逻辑可能会走错路,因为计算机可以访问和执行任 意内存内容,这些内容是和你的程序里的代码和变量是没关系的。所有没有边界检查的编程语言将计算机的多个维度暴露给程序,如果你觉得自己比OpenSSL
开发团队强、能很好的处理这种情况,那是自欺欺人。
我们无法在软件中避免bug的存在,但我们可以堵住这些看起来无穷无尽的bug的源头。因为它,很早之前我们的互联网就遭受了Morris蠕虫病毒的危害。现在,2年的时间里,世界70%的互联网流量都暴露无疑,代价惨重。如果不堵住这源头,以后会让我们损失更多。
英文原文:The Heartbleed Bug
译文链接:http://www.vaikan.com/c-vulnerabilities/
相关文章推荐
- (安全系列二)apk反编译生成程序的源代码和图片、XML配置、语言资源等文件
- 用 C 语言写的程序不安全
- 程序语言的奥妙 算法解读 日本人编著,自己学习笔记
- 汇编语言:汇编程序的hello world程序(实验9根据材料编程)
- Qt语言家使用问题:在语言家翻译了,但程序起来翻译就是不起作用
- [Windows安全知识]Windows 操作系统进程描述(程序进程)
- java中的JNI调用其他开与语言的程序
- 如何掌握所有的程序语言
- JAVA语言搭建白盒静态代码、黑盒网站插件式自动化安全审计平台
- Hybrid App如何实现网页语言与程序语言的混合
- 程序语言解析
- 创造新语言(3)——添加语义处理程序
- 用 C 语言编写 Windows 服务程序的五个步骤
- Android安装程序.APK文件嵌入式多语言汉化教程
- 程序语言的世界观
- c语言分数计数程序
- 将gcc下的程序移植到MSVC下 之一 - gcc对标准C/C++语言的扩展
- 多语言程序在运行过程中,更改显示语言
- PL/0语言编译程序整理实现:(2)、单词类型
- 王爽汇编语言 一个奇怪的程序