写点什么

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

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

关注

评论

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

软件产品信息安全 - 数据分类

Interstate5

软件开发 信息安全 数据分类

《零基础学Java》 FAQ 之 零-这门课适合我吗?

臧萌

Java 编程语言

权威与边界

伯薇

权威 边界 BART 工作方式

小棉袄,最终却没有变成你的防弹衣

小天同学

个人成长 成长 感悟 母亲节 感恩

软件产品开发流程

Interstate5

软件开发 软件开发流程

人人都应该懂的加密算法 - 公钥加密

麦叔

对称加密 加密解密 信息安全 公钥加密

产品周刊 | 第 14 期(20200510)

八味阁

产品 产品经理 产品设计

Java小想法: JDK许可证

X.F

Java 编程语言

Java内存模型和volatile、final等关键字

麻瓜镇

Java 多线程

大话区块链和比特币的技术原理

麦叔

比特币 区块链 数字货币 加密货币 加密解密

高仿瑞幸小程序 05 更正轮播组件的高度计算

曾伟@喵先森

小程序 微信小程序 大前端

《如何阅读一本书》读书心得

兆熊

读书笔记

《你好架构师之 压榨硬件价值的利器容器(Docker)》

再见小飞侠

Android Studio NDK 编译 Bsdiff 库

码农亮哥

android-studio ndk bsdiff

HTTP 升级 HTTPS 全过程记录

猴哥一一 cium

https 证书

模块化设计思想产品设计应用

燕陈华

产品设计 模块化流程 流程图

软件产品的信息安全问题

Interstate5

软件开发 信息安全

webpack入门(一)

子铭

面向对象是什么

落英亭郎

面向对象

给在线教学泼点冷水

启润

在线教育 基础教育

一口气带你踩完五个 List 的大坑,真的是处处坑啊!

楼下小黑哥

Java 踩坑 后端 集合

程序员的晚餐 | 5月9日 炖蹄髈

清远

程序员

从nacos客户端的TIME_WAIT说起

捉虫大师

Java TCP nacos

《零基础学 Java》 FAQ 之 3-为什么计算机里的浮点数不精确

臧萌

Java 浮点数

程序员必需清楚的进程和线程

小趴菜~

线程 操作系统 进程

Redis学习笔记(集合类型)

编程随想曲

redis

LeetCode 1232. Check If It Is a Straight Line

liu_liu

LeetCode

Spring整合MyBatis详细分析

Java收录阁

mybatis

白话计算机网络通信过程

WB

程序员 计算机网络

《零基础学 Java》 FAQ 之 4-关于补码,多说两句

臧萌

Java 补码

用 Electron 打包语雀

封不羁

Java Electron

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