微信号:infoqchina

介绍:有内容的技术社区媒体

【热点】Shellshock漏洞证明是时候放弃CGI技术了

2014-10-15 21:25 InfoQ

最近,被类UNIX系统广泛使用的Bash软件曝出了一系列已经存在数十年的漏洞(Shellshock),在业界引起了非常大的影响。不少Linux发行版本连夜发布了修复版本的Bash,在服务器领域占有不少份额的FreeBSD和NetBSD已经默认关闭了引起漏洞的功能。InfoQ也及时带来了关于Shellshock的详细报道。


在这个漏洞的风波逐渐平息之余,不少业内人士也在思考,它为何波及如此之广,影响如此之大。InfoWorld的专栏作者Andrew C. Oliver在一篇文章中表达了自己看法,他认为CGI技术的普及是个错误,正是因为CGI技术的不合理之处,Shellshock才有机可乘。


CGI技术是Web技术刚兴起的时候发明的,它是最早的可以创建动态网页内容的技术之一。它会把一个HTTP请求转化为一次shell调用。而Shellshock的原理是利用了Bash在导入环境变量函数时候的漏洞,启动Bash的时候,它不但会导入这个函数,而且会误把函数定义后面的命令也执行一遍。在有些CGI脚本的设计中,数据是通过环境变量来传递的,这样就给了数据提供者利用Shellshock漏洞的机会。对此,Oliver抱怨道:

为什么有人会认为,通过HTTP请求给一个陌生人访问shell(哪怕是受限的)的机会是一个好主意呢?我不理解。


Oliver把CGI技术比作“上了膛的武器”,程序员必须非常谨慎地使用它,写出优秀的脚本。但在现代的商业实践中,雇佣优秀程序员已经不是一个必选项,大量的廉价程序员很多时候也能合力完成工作。能写出考虑周全的CGI脚本的人越来越少,这也使得CGI技术更不合时宜了。


Oliver甚至觉得,用C语言编写的动态网页程序都要比CGI好一些,因为避免C语言的缓冲溢出问题其实并不难,如果程序员不给自己挖坑,并且认真做好单元测试的话,问题不会太大。


编写水平糟糕的CGI脚本,确实是互联网上可利用漏洞最多的技术之一了。当然网络、计算机架构等也有可能存在漏洞,但是CGI从诞生之初就是一个设计错误,经历此次Shellshock风波,其弱点也再次暴露在公众面前。Oliver也呼吁大家,逐步放弃CGI技术,“先移除那些暴露在公众访问之下,又需要非常仔细编写才能不出问题的脚本”

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 微信开发的文档和资源 为什么程序员应该养只猫(第二辑) 斯坦福视频实践版(一) Hadoop之父Doug Cutting眼中大数据技术的未来 中国技术力量:阿里技术崛起之路