10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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:252508
用户头像

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

关注

评论

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

吉利汽车宣布进军区块链 多个龙头股企业早已低调精准布局区块链

CECBC

区块链

让代码说话:如何把版本信息注入到代码中

zhujun

c++ Python git rust Go 语言

Go1.16 发布

Rayjun

Go 语言

2020 年行摄回忆录(下)

穿过生命散发芬芳

生活 摄影

Jenkins通过OpenSSH实现Windows下的CI/CD

运维研习社

jenkins CI/CD Windows Server 2012 R2

互联网小拼,这一生的故事,你要看看吗《打工人的那些事》

谙忆

一起重新全面认识JWT-Json Web Token

谙忆

在区块链的新浪潮中,为更多人争取“公平”

CECBC

区块链 新浪潮

Hive底层原理:explain执行计划详解

五分钟学大数据

大数据 hive 二月春节不断更

为什么ElasticSearch比MySQL更适合全文索引

程序员历小冰

数据库 lucene elasticsearch BitMap 跳表

这才是打开“金三银四”Java面试的正确方式,2021“金三银四”看这个就对了

Java 架构 面试

心理学与游戏之现学现卖系列

Justin

心理学 28天写作 游戏设计

Flutter安卓项目第一次启动失败解决方案

人生如梦

flutter

关于智商测试的一点闲话 Day1

道伟

科普 28天写作

Dart 后台开发 Aqueduct 插入数据 获取数据API

人生如梦

flutter dart

计算机中的层次化存储是个什么鬼?

冰河

程序员 数据结构 算法 计算机 层次化存储

2021 Flutter从零开始之全栈开发,后台到在线教育APP上线。

人生如梦

flutter dart

Dart 后台开发 Aqueduct集成Swagger客户端

人生如梦

flutter dart

腾讯发布区块链产业加速器,生态共创助力新基建建设

CECBC

腾讯

最常见的10种Java异常问题!

Java架构师迁哥

微服务架构:网关概念与zuul

程序员架构进阶

服务化 API网关 七日更 28天写作 2月春节不断更

程序员成长第十篇:从阅读代码开始

石云升

28天写作 2月春节不断更 阅读代码

MySQL 批量修改所有表字段字符集及排序规则

运维研习社

MySQ

Dart 后台开发 Aqueduct ORM初始化数据库

人生如梦

Dart 后台开发 Aqueduct @Column标记

人生如梦

干货 | Redis 实现发布订阅原理与实践

架构精进之路

redis 28天写作 发布订阅

翻译:《实用的Python编程》02_01_Datatypes

codists

Python 人工智能 数据结构与算法 字典 元组

28天瞎写的第二百三十九天:什么是正念冥想?

树上

冥想 28天写作 正念

Nginx零成本、易操作实现网站视频加速

运维研习社

nginx 流媒体 网站优化

(28DW-S8-Day1) 定个魔幻的范围:在线教育+区块链

mtfelix

比特币 区块链 在线教育 28天写作 教育+区块链

Let's Encrypt签发工具CertBot-auto不再维护

运维研习社

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