BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Shellshock漏洞证明是时候放弃CGI技术了

| 作者 曹知渊 关注 1 他的粉丝 发布于 2014年10月15日. 估计阅读时间: 3 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

最近,被类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中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

谁说的CGI就是调用shell? by liu pi1ot

谁说的CGI就是调用shell?CGI只是一个规范,任何返回动态内容的HTTP地址都是一个CGI。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT