写点什么

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

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

关注

评论

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

上海一科技公司刷单被罚22万,揭露网络刷单灰色产业链

石头IT视角

什么是服务治理

阿泽🧸

服务治理 8月月更

头脑风暴:单词拆分

HelloWorld杰少

算法 LeetCode 数据结构, 8月月更

前端食堂技术周刊第 47 期:Docusaurus 2.0 、7 月登陆网络平台的新内容 、Nuxt.js 团队的轮子库

童欧巴

JavaScript 前端

操作系统:SSH协议知识介绍

天使不哭

Linux SSH #开源 8月月更

SRv6性能测量

穿过生命散发芬芳

8月月更 SRv6

数据治理(五):元数据管理

Lansonli

大数据 数据治理 8月月更

2022秋招前端面试题(九)(附答案)

helloworld1024fd

2022秋招前端面试题(十)(附答案)

helloworld1024fd

开发者必备:一文快速熟记【数据库系统】和【软件开发模型】常用知识点

小阿杰

软件开发流程 软件开发原则 数据库系统 签约计划第三季

Kubernetes 开发环境比对

CTO技术共享

开源 签约计划第三季 8月月更

Kubernetes服务接入Istio

CTO技术共享

开源 签约计划第三季 8月月更

10min快速回顾C++语法(一)

timerring

c++ 算法 8月月更

Kubernetes YAML编写 讲解

CTO技术共享

开源 签约计划第三季 8月月更

全面解析FPGA基础知识

芯动大师

签约计划第三季

每天一个CSS小特效,文字闪烁——【钢铁侠:爱你三千遍】

前端小刘不怕牛牛

JavaScript html/css 8月月更

RocketMQ Binder集成消息订阅

急需上岸的小谢

8月月更

程序员从佩洛西窜访事件中可以学到什么?

慕枫技术笔记

思维 构架 8月月更

你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06

刘悦的技术博客

Go golang 编程语言 Go web golang 面试

数据库治理利器:动态读写分离

阿里巴巴云原生

数据库 阿里云 微服务 云原生

FileZilla搭建FTP服务器图解教程

天使不哭

#开源 8月月更

带着昇腾去旅行:一日看尽金陵城里的AI胜景

脑极体

阿里云架构师金云龙:基于云XR平台的视觉计算应用部署

阿里云弹性计算

视觉计算 计算巢 云XR平台 GPU实例

大型分布式存储方案MinIO介绍,看完你就懂了!

天使不哭

存储 MINO #开源 8月月更

每日一R「02」所有权与 Move 语义

Samson

签约计划第三季 8月月更 ​Rust

781. 森林中的兔子

小卢要刷力扣题

力扣 8月月更

一文教会你快速上手 Vim

昆吾kw

vim Linux

如何正确理解线程机制中常见的I/O模型,各自主要用来解决什么问题?

PivotalCloud

Linux Linux Kenel

小程序+自定义插件的关键性

Geek_99967b

小程序

Kubernetes 60个为什么

CTO技术共享

开源 签约计划第三季 8月月更

《MySQL入门很轻松》第4章:数据表中存放的数据类型

乌龟哥哥

8月月更

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