为什么总有无数的Bug困扰着程序员

在代码上耗费的时间和资金越多,程序防御力就越强——但是黑客们总有办法找到其中的漏洞

又是整整一个月,整整一个月忙着安装补丁——回环往复、无穷无尽,一想起来就头大。

我们的软件编码工具有着默认的内置安全防御措施,我们的编程语言是安全的,我们的程序员使用的是SDL (security development lifecycle)编码工具和技术,我们的操作系统有着不断升级的安全设置,供应商也一直不断地侦查和攻击自己的软件意图找到漏洞,甚至还有的公司花费几十亿美元用于消除软件bug。

我们一直在勤勤恳恳努力着,但是为什么还有这么多漏洞?为什么这些漏洞能逃过fuzzers和测试人员的层层抓捕?

下面就是为什么我们的软件之所以依然充满漏洞的5大原因:

1.人的天性

大多数——当然不是全部——软件bug源于我们自己犯的错误。虽然有些是因为软件编码工具和编译器发生了意外,但是大部分的错误得归咎于我们自己。

无论我们受到的SDL培训和安全工具有多么强大,只要我们还是人,我们就会犯错。如果你想问为什么电脑软件会有这么多的漏洞,归根到底是因为,人的天性就是容易犯错。

也就是说,我们在减少人为错误方面做得还不够。有很多程序员因为没有受到足够的SDL培训(有的甚至干脆就没有培训),所以根本就没有安全编程的理念。有时候我特别奇怪:有那么多的程序员以写安全软件为生,却居然不懂如何安全地编程。别不信,我敢打赌,你正在运行的银行安全软件中的bug不会比它能提供的保护措施少,搞不好甚至更多。

但是即使是那些经过严格训练的程序员还是不可避免出现bug。举个例子,前不久有个自鸣得意的家伙发明的使用HTML标记字段确定颜色的缓冲区在浏览器中溢出了。不像以前还要输入FFFFFh之类的东西,黑客甚至可以直接执行颜色域的代码,从而导致浏览器过度消耗资源、缓冲区溢出。看到没有,这就是漏洞!而且很少会有人能预料到这种情况。

2.不断增加的软件复杂性

就其本质而言,软件越复杂,就意味着代码行数越多。只要你在编程,那么即使你有多擅长写代码,也一定会有错误和bug出现。有人曾说,如果你能做到每50行代码中只出现一个错误,那你就已经做得相当好了。大多数程序员差不多每隔5至15行就会犯错。想象一下,这么说吧,一般性的Linux内核拥有超过1500万行的代码,有多少bug你自己算吧!

即使没有编码错误,互联网时代应用程序的整体互动性也是漏洞被攻击的途径。大多数程序员不得不和其他API协作,保存和检索文件,在多种设备上正常工作。所有这些过程都会增加被成功击破的概率。

而要防守的话,则需要写更多的代码,因为得抵御各种不同的攻击渠道。这么说吧,如果有一个只有30条汇编语言指令的恶意程序,那么针对相应的防守,你可能至少得写50000条汇编语言指令!

3. Fuzzers也是人写出来的

新近冒出来的Fuzzers软件主要用于扫描软件漏洞。Fuzzers——以及其他用于寻找编码错误和漏洞的任何程序——都是人写出来的,还是这句话,是人就会犯错误。例如Fuzzers是不会发现颜色属性的缓冲区溢出这种情况的,这是因为我们在写Fuzzers的时候没有考虑这一方面。不过当我们意识到这一点并对Fuzzers进行更新之后,就能做到去查找各种类似的缓冲区溢出条件的字段。简而言之,我们要Fuzzers做什么,它才会去做什么。

4.缺乏对供应商的问责

许多安全专家抱怨,只要我们不能找到证据起诉供应商的软件缺陷,我们就永远不会变得更安全。我赞同这一点,增加对供应商的问责有助于降低安全风险,但是同时却有可能会减缓进度。不过如果软件公司比现在更能担当起责任来,那么我想我们能在手机上、电脑上能自由自在冲浪的感觉会更爽。

但是成功源于功能和速度,而非安全。社会现状决定了我们必须牺牲一部分安全和保障去换取新鲜感。这不一定是坏事——因为能让我们成功得更快。但是这样一来我们就不得不承担这样做的后果。不过到目前为止,我们还是心甘情愿为了添加更酷的新鲜玩意儿而面对更多的风险。

5.缺乏对黑客的问责

现实是上面没有一条能很快解决。但是软件出现漏洞就其本身而言,真不是什么大问题。说它脆弱是因为这些软件在面对恶意攻击的时候毫无抵挡之力。除非我们能制止黑客的猖獗行径,否则恶意软件将会一直困扰着我们。

对于Android开发手机软件,开发过程中也不免产生隐藏在深处不容易找到的bug,码代码的时候不留意,开发出来的软件有漏洞,极易被黑客利用。因此,对于漏洞,一定不能手下留情,及时用漏洞检测工具Safe.ijiami去查找漏洞所在。这款漏洞检测工具,不仅能检测出漏洞,还能根据漏洞提出解决方案,并可一键生成详细的分析报告!很强大有木有!

虽然bug无处不在,但是我们依然要相信,将来有一天我们的互联网会有更好的普遍标准出台,我们能在现实中及时地将那些损害大家利益的家伙绳之以法。不过在此之前,我们还是得不断地写补丁,在黑客的狂轰滥炸下苟延残喘。

时间: 2024-07-30 01:50:57

为什么总有无数的Bug困扰着程序员的相关文章

IBM总架构师寇文东谈程序员的职业规划

有些年轻的程序员向我咨询,将来的路该怎么走?俗话说,条条大路通罗马.不同的路都能走向成功,到底选择哪条路,取决于自己的兴趣.可能有程序员会问:如果还没有找到自己的兴趣怎么办?我的建议是多尝试,努力做,这是职业生涯的必经之路.当你积累了一定的技术和经验之后吗,就会面临多种选择.选择哪条路,因人而异.常见道路如下: 专家级程序员 如果对某一种或几种技术非常感兴趣,并且能够持续钻研,经过一定时期的积累,你可以逐渐成长为专家级程序员.专家级程序员对所掌握的专业技术的熟练程度非一般程序员所能及,给类常见的

程序员遇到Bug时的30个反应

开发应用程序是一个非常有压力的工作.没有人是完美的,因此在这个行业中,代码中出现bug是相当普遍的现象.面对bug,一些程序员会生气,会沮丧,会心烦意乱,甚至会灰心丧气,而另一些程序员会依然保持冷静沉着.因此,如何处理修复bug的过程也值得我们细细琢磨.我想分享一些程序员修复他们的源代码时所经历的想法.这是事情变得紧张时所触发的轻松幽默.通常说来,应用程序终将可以工作,然后你也可以进入到下一个伟大的任务.我相信很多web开发人员和软件工程师经历过这些艰辛,然后在事后一笑而过. 1.“我不知道是要

程序员奇谈之我写的程序不可能有bug篇

程序员在普通人的印象里是一份严(ku)谨(bi)的职业,也是一个被搞怪吐槽乐此不疲的职业,程序员们面对复杂的代码敲打电脑时连眉头都不会皱一下,但是有一个词却是他们痛苦的根源,它就是Bug. 有不少的新手程序员,刚开始都是从修BUG开始做起的. 修bug有助于熟悉项目,了解大概哪些类参与了执行线路,相互调用关系又是如何,结构设计上有什么特点. 以前猿姐就听过这样一个故事 有三个程序员需要穿过一片田地,到达对岸的房子. 初级程序员看了一眼笑着说道:不远,只需要十分钟就行. 资深级程序员想了一下说道:

程序员听到bug后的N种反应,太形象了

程序员的世界里,不止有代码,还有bug,bug,bug 当出现bug时,程序员们的反应是怎样的呢?

程序员遇到BUG的解释

开发应用程序是一项压力很大的工作,人无完人,工作中遇到bug是很正常的事,有些程序员会生气,沮丧,郁闷,甚至泄气,也有一些程序员则会比较淡定.如何进行修复bug的过程,是值得我们好好推敲的. 我想分享一些有关程序员在努力修复bug时常说的话和冒出的想法.当氛围变得紧张的时候,这些话就会显得轻松幽默.最终,bug也会修复成功,你将会继续下一个任务. 我相信许多web开发人员和软件工程师在编程中都会遇到困难,而事后回想起来,还会觉得很好笑. 1.我不知道该删掉还是重写 回归曾经写的源代码,总有一种想

困扰了百万程序员20年的10大难题!

程序猿最艰巨的任务跟编写代碼没得几个关系.编码是逻辑构思的一种实践,这跟程序猿日常工作中的其他任务比起来相对简单.如果你觉得自身還是1个技术水平普通的程序猿,在你真正的能进入到顶尖高手行列前,请保证你已经战胜了下述晋升的阻碍. 1. 解释你在干什么 解释软件开发过程是1个很艰难的事情.那些非程序猿岗位的人或许了解许多有关编程的事情,但很显然,他们不会编程.对于他们而言,我们的生活只是在一间漆黑的房间内趴到键盘前消耗着咖啡. 你会在你的朋友.亲人和同事中遇上这样的人,他会觉得编码并不是1个合理的岗

一个bug引发的血案——从程序员角度看罗一笑事件

我这人有个毛病一直改不掉,不过好像也没怎么试过去改,那就是自命清高.这应该是文青的一大特点,总觉得跟文化这么高雅的东西挂钩怎么都低俗不了. 在做公众号这件事情上,自命清高就体现在不谈热点.去年一年火的事情不少--阿尔法狗大战李世乭.王宝强事件,以及川普当选美国总统.为什么不谈呢?首先是因为大家都在谈,我也跟着凑上去有种蹭热点的嫌疑,而且更有种人云亦云的庸俗感.其次是因为有一贯关注的主题,平时工作已经够忙的了,闲下来的时间还是要分配给它们. 到了新的一年,我要洗心革命,要跟人民群众靠拢,不能再做一

漫谈程序员系列:无BUG不生活

我决定谈一谈世界上最著名的虫子:BUG ! BUG 困扰了一代又代的程序员,不论是杰出的计算机科学家,还是像 Linus Torvalds(Linux内核创始人) .Bill Joy(传说三天写出BSD的前身,vi和csh的作者)等神一样的传说,抑或你我芸芸程序猿,都是 BUG 骚扰的对象. BUG 是绝对狂热的好战分子,具有永不停歇的战斗欲望,它潜伏在程序员的周围,一双小眼贼亮贼亮,在你百密一疏时出其不意一击奏效.而无论你是钢筋铁骨,还是羊脂玉体,只要被这只虫子袭击(看过<木乃伊>的话,对圣

经验分享:程序员如何快速定位问题(BUG)

让我掉下眼泪的 不止内存泄漏 让我夜夜不眠的 不止你的需求 明天还要改多久 你攥着我的手 让我感到为难的 是善变的需求 发布总是在半夜 回滚是永远的愁 错误(Bug)随时的暴漏 困扰着我心头 作为程序员,以上这些场景你一定都经历过.今天就来聊聊如何快速定位问题. 先划重点,下文所写都是一家之言,本人工作经验不多,语言表达能力有限,如果写的不好,还望轻喷.另外,本文所讲都是站在Java后端开发者的角度. 背景 下文所讲内容,都会围绕以下几个真实案例来做举例分析,先描述一下具体案例: 案例1:App