当程序员被人们唤作“程序猿”的时候,更多的含义是他们要面对的庞大工作量——几乎昼夜不停地写代码、编程序,才能满足用户们对于手机、电脑上各种应用程序的要求。
开发、编程,这个听起来高大上的专业领域,让门外汉们遥不可及。不过没关系,只要程序界面友好、安全就是普通用户最大的愿望。不过,如今“安全”的程序真的存在吗?
近日,一家软件安全公司的调查曝出,程序员的代码并非一个一个敲进去的,他们经常会免费地从论坛、搜索结果中“借鉴”别人的代码片段。这就会产生问题:他们没有仔细推敲过这些代码段的安全性。有专家认为,这种重复性的代码很可能被黑客利用,导致多个相似程序被攻击。
抄代码会留“后门”?
6月23日,美国的软件安全公司Veracode发布了一份关于客户软件使用习惯的报告,显示Veracode在对客户去年使用的超过20万款软件进行检测后发现了690万个缺陷问题。客户们修复了470万个缺陷。其中有一些是各公司的内部程序员自己编写的,但绝大部分问题代码来源于别的地方。也就是说,他们的代码是直接“抄袭”的。
Veracode报告认为客户中安全性最差的是政府部门,“原因是政府部门依然在使用过时的编程语言”。Veracode联合创始人Chris Wysopal表示,领着高薪水的程序员们工作的重点是效率和开发速度,绝不是安全性。
不过,另一家从事代码漏洞安全检测的公司Sonatype的CEO Joshua Corman则表示程序员喜欢Ctrl-C、Ctrl-V,这说明他们很懒吗?不,他们只是在有效率地工作。一些公司使用Veracode和Sonatype这样的服务来保证安全性,另一些则雇佣安全检测员,这些人的职责就是在代码中寻找漏洞。
在我国某大型搜索引擎公司工作的谭冰(化名)是众多程序员中的一名。他的工作就是每天要完成大量的程序编辑。“这种将别的网站上的代码直接拿来抄袭或者说复制粘贴的现象非常常见。因为不这样做就无法完成工作。”谭冰告诉《中国科学报》记者。
“利用开源代码,或者免费代码直接拷贝或引用的做法并不奇怪。这其中主要遵循的是软件工程的方法论,即代码复用。就是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。”华南师范大学计算机学院教授赵淦森在接受采访时说,“这样就提升了软件生产的效率。但是如果拷贝的代码根源出现了问题,那么设计出来的程序肯定也会存在问题。特别是如果问题出现在主结构,就会有很大影响。”
效率与安全能否兼得
然而,在实际的程序开发过程中,经常会出现与之前类似的内容,比如天气预报、交通状况等。“如果上个项目实现了这个功能,而另一个项目需要类似的功能,那么程序员就会选择直接应用之前的。”谭冰解释说,比如之前的程序语言是NET,新的程序可能要用JAVA编程,那么换一种编译就可以继续使用了,再比如,程序语言甚至都不用转换,直接将上一个的应用包拿来放在新程序中就大功告成了。
“在一个项目组中,往往只有一到两个人写框架,其他的十几个人就是写基本程序,那么将相似东西拿过来改一改就能用。”谭冰说,“但不要小瞧这项工作,因为要先看懂这个代码是不是自己想要的。如果想要完全自己重新编程,现在几乎没有了。”
“对于老板来说,写程序主框架的人是主力,下面的程序员则是‘流水的兵’。当上一个‘兵’走了以后,下一个接手的只需要将前人留下的程序直接用就可以了,不会影响下面的工作。”谭冰解释说。
在这个换人和抢占市场同样高速的年代,创业公司除了需要良好的创新思维,更需要的是高效的工作效率。
不知你是否注意过这个细节,每个使用智能手机并安装App的人,都接收过升级软件的要求,而且每隔一段时间就会有新的版本发布。如果点开仔细看看新版本的不同之处,往往是修复“XX bug(漏洞)”。
这是因为在很多IT公司中,他们编写的程序其实都存在漏洞,但为了抢占市场,根本来不及修复这些漏洞。“有些程序甚至存在上万个漏洞,但是也要推出去。”赵淦森说。之后的补救措施,就是不断发布新版本,修复之前的漏洞。
而在谭冰的公司,他们在争取效率与效益最大化的同时,开启了云服务和查杀毒功能,帮助完善那些在编程时可能留下的漏洞。
越多人“抄”越安全
除了事后采取的补救措施,赵淦森认为抄袭代码本身可能也是给程序带来安全的途径之一。“我们不能只看他不安全的一面,其实复用代码的安全性很高,因为只有中等偏上的代码才会被重复使用、参照。”赵淦森说。而且,Veracode公司发布的数据也不能只从负面看,“要看到的是,不重复使用代码,这些软件中可能存在更大的隐患”。
在很多开源网站上,“流传已久”的代码都是经过反复验证的。“因为用的人多,这些程序员发现有问题的时候他们会改正,并且把改好的代码再发到网站上,这样遗留的问题会越来越少。整体来说,我认为开源代码质量会更高。就好比一辆汽车,全世界很多人都在驾驶,发现了问题就能及时完善,这样就比只有几个人驾驶的汽车更加安全。”赵淦森说。
而且,程序员们将程序放到网站的同时就放弃了知识产权中的收益权,而是通过整个产业的发展获取利益。不过,有些公司也依靠编程赚钱。他们往往将简单的程序放在网站上,如果客户想要更好的程序代码,就需要付费了。
最成功的八个开源软件
开放源代码(Open Source)是一种源代码可以任意获取的计算机软件,这种软件的版权持有人在软件协议的规定之下保留一部分权利并允许用户学习、修改、增进提高这款软件的质量。而在众多成功的开源产品中,只有少数领头羊,而其他产品基本无法望其项背。
Linux
从Linus Torvalds在1991年宣布他在Minix基础上创建一新OS内核到现在已经接近20年了。在这段时间内,大部分网络服务器都是Linux系统。
BSD
长久以来,FreeBSD、 NetBSD和OpenBSD是服务器众操作系统之中广为人知的3个OS。上世纪90年代,三者均是脱胎于伯克利的Unix系统,故把三者组团上榜。另外,Apple的Mac OS脱胎于FreeBSD。
MySQL
它是全球使用范围最广的数据库系统。2009年,全球的MySQL安装数量已达一千一百万。众多知名网站和产品均使用MySQL,比如:维基百科、Facebook、Google和Wordpress。Google和Facebook均改造了MySQL,以满足自身需求。
Apache
自1996年Apache HTTP服务器诞生以来,它是全球使用最广泛的Web服务器,其市场占有率远远超过第二名的IIS。
Firefox
目前Firefox虽无法撼动IE的霸主地位,但它是众多技术人员的首选浏览器。
WordPress
从2004年Wordpress作为b2博客软件的分支面世后,它开始主宰博客平台市场。据Pingdom 2009年的调查表明,全球Top 100博客中27%使用Wordpress。
BIND
BIND(Berkeley Internet Name Domain Server)是现今互联网上最常使用的DNS服务器软件,使用BIND作为服务器软件的DNS服务器约占所有DNS服务器的90%。
Ubuntu
2004年10月20日,Ubuntu首个板块发布。迄今为止,它是Linux流传最广的分支,尤其是其出色的桌面系统。鉴于Ubuntu近些年来的巨大成功,榜上有名,应当之无愧。