写点什么

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

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

关注

评论

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

刷新AI作图速度,最快开源Stable Diffusion出炉

OneFlow

人工智能 深度学习 前沿技术

【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(下)

码界西柚

JVM 12月日更 堆外内存 内存干扰

Java递归实现评论多级回复

Jeremy Lai

递归 解决方案

详解ConCurrentHashMap源码(jdk1.8)

Jeremy Lai

ConcurrentHashMap 源码阅读

web前端培训程序员学习什么呢

小谷哥

云原生大数据平台零信任网络安全实践技术稿

星环科技

SpringBoot整合RabbitMQ实现六种工作模式

Jeremy Lai

spring-boot Rabbit MQ

大数据培训学习分析师怎么样

小谷哥

【JUC】循环屏障CyclicBarrier详解

JAVA旭阳

Java 并发 JUC

【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(上)

码界西柚

Docker Kubernetes 容器 JVM 12月日更

瓴羊Quick BI带给企业新发展,企业数字营销和运营变得格外简单

对不起该用户已成仙‖

大数据培训学习编程技术的方法有哪些

小谷哥

SAP MM 使用两个STO实现免关税跨国公司间转储(II)

SAP虾客

SAP MM PO输出 NACE

Java通过反射注解赋值

Jeremy Lai

解决问题 java注解

Centos7安装Nginx教程,一步安装http和https

Jeremy Lai

nginx Linux安装

【0.1mm钻孔】揭秘激光钻孔加工常见的4种方法

华秋PCB

工艺 PCB PCB设计 钻孔

零售品牌如何挑选达人KOL?火山引擎VeDI有妙招!

字节跳动数据平台

大数据 营销 营销数字化 12 月 PK 榜

SpringBoot快速整合通用Mapper

Jeremy Lai

通用Mapper spring-boot

MySQL更新锁表超时 Lock wait timeout exceeded

Jeremy Lai

事务隔离 Mysql死锁

web前端培训程序员学习怎么提升技术

小谷哥

五种方式实现 Java 单例模式

Jeremy Lai

设计模式 单例模式

模拟HashMap冲突

Jeremy Lai

hashmap 哈希冲突

将 Vue.js 项目部署至静态网站托管,并开启 Gzip 压缩

华为云开发者联盟

开发 华为云 12 月 PK 榜

React 之 createElement 源码解读

冴羽

JavaScript 前端 前端框架 React react源码

Zebec节点Zepoch销量接近800个,生态发展信心十足

股市老人

详解HashMap源码解析(上)

Jeremy Lai

HashMap底层原理

详解HashMap源码解析(下)

Jeremy Lai

HashMap底层原理

Serverless 架构下的 AI 应用开发

Serverless Devs

meta force原力元宇宙魔豹联盟矩阵公排dapp系统开发源代码

开发微hkkf5566

一种多引擎可视化数据流实现方案

元年技术洞察

数据中台 数字化转型 专利解析 方舟企业数字化 PaaS 平台

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