用C语言写的程序不安全

标签: 批评评论 bug 安全漏洞 编程语言 缺陷 | 发表时间:2014-04-14 00:01 | 作者:Aqee
出处:http://www.vaikan.com

heartbleed

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

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

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

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

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

本文由 外刊IT评论网( www.vaikan.com)原创发表,文章地址: 用C语言写的程序不安全,[英文原文: The Heartbleed Bug ]

你也许会喜欢这些文章:

  1. 我曾遇到最大的一个bug
  2. 如果一切需要重学,2014年应该学哪些技术?
  3. 作为程序员必须知道的编程语言编年史
  4. 我是如何入侵一个银行并挣了40大元的
  5. 完美软件的经济学分析




相关 [语言 程序 安全] 推荐:

用C语言写的程序不安全

- - 外刊IT评论网
关于C语言内存管理薄弱的问题几年前我们就 讨论过. 有人试图反驳,说现代各种操作系统或runtime平台的进步,对内存管理的风险提供了各种保护,比如地址空间随机化,还有各种诸如Valgrind这样的工具可以发现内存访问bug,大大削弱危险程度. 我十分推荐大家重新阅读一下那次讨论. 我的观点——当时和现在——都是C语言不适合用来写安全性要求高的程序,任何缺乏内存检查机制的编程语言都不适合.

BT雷人的程序语言(大全)

- 安淡名 - 酷壳 - CoolShell.cn
还记得以前本站的BT雷人的程序语言吗. 除了那几个Brainfuck,LOLCODE和WhiteSpace,我以为这些是比较BT的语言,但是自从这两天我在网上看到一些(见文章最后的参考一节),我发现我错了,这个世界上,只有更变态,没有最变态. 不相,你看看下面这些,简直变态到了极致啊. 第一个变态语言Befunge.

go语言编写Web程序

- - 博客园_首页
创建一个数据类型,含有load和save函数. 基于http包创建web程序. 基于template包的html模板技术. 使用regexp包验证用户输入. web程序的基础技术(HTTP, HTML). 首先,要有一个Linux, OS X, or FreeBSD系统,可以运行go程序. 如果没有的话,可以安装一个虚拟机(如VirtualBox)或者 Virtual Private Server.

Go语言项目的安全评估技术

- - IT瘾-tuicool
在今年夏天我们对 Kubernetes的评估成功之后,我们收到了大量Go项目的安全评估需求. 为此,我们将在其他编译语言中使用过的安全评估技术和策略调整适配到多个Go项目中. 我们从了解语言的设计开始,识别出开发人员可能无法完全理解语言语义特性的地方. 多数这些被误解的语义来自我们向客户报告的调查结果以及对语言本身的独立研究.

过去五年出现的新程序语言

- chas - Solidot
Google的Go语言和Dart语言备受瞩目,但它们只不过是过去几年涌现出的十多种新语言之一,软件架构师Fogus在他的博客上介绍了过去五年出现的新程序语言. 除了Go和Dart外,这些语言还包括了:基于函数语言Qi的Shen语言,自动定理证明程序语言Agda 2,Pure,动态、强类型、基于原型的语言Ioke,OMeta,CoffeeScript,Clojure,Scratch,Fortress,Arc,Potion,Mirah等等.

Python程序语言快速上手教程

- - SEM WATCH
本文是面向SEO人群的Python程序语言入门教程,也适用于其他没有程序基础但想学习些程序,以解决简单的实际应用需求的人群. 在后面会尽量用最基础的角度来介绍这门语言. 本来打算从网上找一篇入门教程,但因为Python很少是程序员的第一次接触程序所学的语言,所以网上现有的教程多不是很基础,还是决定自己写下这些.

美国一名程序员对Swift语言的看法

- - 博客园_新闻
近 20 年来,苹果一直把 Objective-C 作为主要的编程语言,而在今天举行的全球开发者大会上,苹果推出了一个全新的编程语言 Swift. 据悉,苹果此次发布的 Swift 兼容 Objective-C 语言,从其开发者指南中,我们看到 Swift 从 Python 和 JavaScript 中吸取了许多东西,从而让 Swift 更易读,或者说更为“口语化”.

作为程序员必须知道的编程语言编年史

- - 博客园_新闻
英文原文: History of Programming Languages Must Know . 我们都知道,编程语言是一组用来定义计算机程序的语法规则. 它是一种被标准化的交流语言,用来向计算机发出指令. 一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动.

程序员都应该了解哪些安全知识

- - 东西-科技
导读:本文来自StackOverflow上的一个问答贴. 网友 M.H 提问: 我是一名IT专业学生,现在是大三,直到现在我们才开始学习很多计算机相关的课程(编程、算法、计算机体系结构、数学等……). 但是还有一个叫“安全”的世界离我们很远,我是指:计算机安全、互联网安全、网络安全、Hacking、破解等.

程序员是应用安全的第一道闸

- - ITeye资讯频道
绝大多数的企业,都是在Web应用设计结束后才开始考虑应用安全的问题,应用安全与应用开发之间的脱节是导致各种严重的安全漏洞的根源. 对很多互联网企业来说, Web应用安全往往在开发过程中被忽略. VentureBeat的专栏作者John Jacott最近发表了一篇博文认为安全的第一个也是最重要的环节是程序员.