最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

  • 2014-10-14
  • 本文字数:964 字

    阅读完需:约 3 分钟

最近,被类 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 )关注我们,并与我们的编辑和其他读者朋友交流。

2014-10-14 03:252066
用户头像

发布了 77 篇内容, 共 35.3 次阅读, 收获喜欢 25 次。

关注

评论

发布
暂无评论
发现更多内容

求天理 存人欲|靠谱点评

无量靠谱

Python代码阅读(第9篇):返回最长的输入对象

Felix

Python 编程 Code Programing 阅读代码

新药研发周期越来越短,北鲲云超算平台如何提高药企竞争力?

北鲲云

Linux从头学:所有编程语言中的栈操作,底层原理都在这里

Java 编程 架构 面试 架构师

Git 应该用 fetch 还是 pull

HoneyMoose

fil矿机价格怎么计算?fil矿机托管费用怎么计算?

fil矿机价格怎么计算 fil矿机托管费用怎么计算

区块链和比特币到底有什么关系?

CECBC

GitHub不再支持密码验证解决方案:SSH免密与Token登录配置

zhoulujun

git GitHub SSH Token 免密登录

从0开始的TypeScriptの七:函数

空城机

typescript 大前端 8月日更

架构实战营 毕业设计:设计电商秒杀系统

Ahu

七夕特别篇|用Python绘画牛郎织女在鹊桥相见

Python研究者

8月日更

Vue进阶(三十四): webstorm 应用 git 进行版本管理

No Silver Bullet

git Vue 8月日更

区块链技术 | 数字货币的未来发展前景趋势分析

CECBC

阿里P8亲传Java面试指南,助我一路过关斩将,成功拿到大厂Offer

Java 编程 面试 程序人生 架构师

毕业总结

Johnny

架构实战营

JavaScript继承的实现方式:原型语言对象继承对象原理剖析

zhoulujun

JavaScript

到底啥是区块链分叉?

CECBC

梳理会在Scrum中是活动还是事件?——《Scrum指南》重读有感(6)

Bruce Talk

Scrum 敏捷 随笔 Agile

提升个人影响力的简单原则

俞凡

认知

如何在二三线城市月薪过万(二)面试100人后的经验总结!教你如何做面霸

小鲍侃java

8月日更

上游思维:上工治未病

石云升

读书笔记 公司管理 8月日更 上游思维

fil最新消息!Fil价值与未来如何?

区块链 分布式存储 IPFS fil FIL价值

minetest Window编译运行

c++ 开源 游戏 我的世界

【前端 · 面试 】HTTP 总结(十二)—— URL 和 URI

编程三昧

面试 HTTP url 8月日更

前端之算法(四)快速排序

Augus

算法 8月日更

我为什么不建议大家等公司倒闭之后,再找工作!

非著名程序员

面试 认知提升 招聘管理 8月日更

fil挖矿怎么样?fil挖矿收益怎样?

fil挖矿怎么样 fil挖矿收益怎样

模式包括问题和解决方案

escray

学习 极客时间 如何落地业务建模 8月日更

看完这篇博客,Python Django 你就学会一半了

梦想橡皮擦

8月日更

【Vue2.x 源码学习】第三十五篇 - 组件部分 - Vue.component 实现

Brave

源码 vue2 8月日更

万字文肝Python基础知识

ベ布小禅

8月日更

Shellshock漏洞证明是时候放弃CGI技术了_语言 & 开发_曹知渊_InfoQ精选文章