主题 : 用C语言写的程序不安全
级别: 九滴秋露

UID: 55460
精华: 0
发帖: 70952
威望: 51692 点
无痕币: 18932 WHB
贡献值: 666 点
在线时间: 26280(时)
注册时间: 2008-10-01
最后登录: 2019-05-12

0 用C语言写的程序不安全

管理提醒: 本帖被 hexj9 执行合并操作(2014-04-14)
        关于C语言内存管理薄弱的问题几年前我们就讨论过。有人试图反驳,说现代各种操作系统或runtime平台的进步,对内存管理的风险提供了各种保护,比如地址空间随机化,还有各种诸如 Valgrind 这样的工具可以发现内存访问bug,大大削弱危险程度。

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

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

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

        我们无法在软件中避免bug的存在,但我们可以堵住这些看起来无穷无尽的bug的源头。因为它,很早之前我们的互联网就遭受了Morris蠕虫病毒的危害。现在,2年的时间里,世界70%的互联网流量都暴露无疑,代价惨重。如果不堵住这源头,以后会让我们损失更多。
吃亏是福,能忍自安
级别: 七朵秋菊
UID: 71931
精华: 0
发帖: 12912
威望: 36404 点
无痕币: 819 WHB
贡献值: 25 点
在线时间: 8526(时)
注册时间: 2008-12-24
最后登录: 2024-05-31

呵呵,上班后除了汉语,再没用别的语言说话了!
级别: 六行秋雁
UID: 298888
精华: 0
发帖: 1745
威望: 7814 点
无痕币: 3619 WHB
贡献值: 0 点
在线时间: 2065(时)
注册时间: 2018-07-12
最后登录: 2021-06-08

有道理,赶紧修订吧
春来花自青,秋至叶飘零,无穷般若心自在,语默动静体自然
级别: 六行秋雁
UID: 33568
精华: 0
发帖: 2214
威望: 18011 点
无痕币: 2909 WHB
贡献值: 0 点
在线时间: 526(时)
注册时间: 2008-05-28
最后登录: 2023-06-19

也想学学C语言
级别: 六行秋雁
UID: 6967
精华: 0
发帖: 2241
威望: 14936 点
无痕币: 8307 WHB
贡献值: 0 点
在线时间: 9256(时)
注册时间: 2007-12-30
最后登录: 2024-05-22

Cygyy         
上联:试问中国男足几多愁
下联:恰似一帮太监上青楼
横批:没人会射
级别: 六行秋雁
UID: 20133
精华: 0
发帖: 3704
威望: 14989 点
无痕币: 16151 WHB
贡献值: 1 点
在线时间: 907(时)
注册时间: 2008-04-09
最后登录: 2024-05-02

来看看什么情况
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605080
威望: 530158 点
无痕币: 15 WHB
贡献值: 0 点
在线时间: 62884(时)
注册时间: 2008-12-25
最后登录: 2024-06-03

这个我就看看了啊。
Total 0.050082(s) query 4, Time now is:06-03 04:49, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛