【Java之父】.NET的巨大安全漏洞
Renai LeMay, ZDNet Australia
February 04, 2005
URL: http://www.zdnet.com.au/news/security/0,2000061744,39179932,00.htm
翻译:yqj2065
Java的创建者James Gosling本周说:微软在.NET的通用语言执行环境(common language runtime)中支持C and C++的决定是“他们能够做出的最大的、最唐突的决定”。
本周早些时候,Gosling——现任Sun’s Developer Products group的CTO,在悉尼的一次活动中,对开发人员的演讲时做出上述评论。他进一步评论说,通过把这两种语言纳入微软的软件开发平台,该公司“留下了一个巨大的安全漏洞,足以让很多很多大卡车穿来穿去”。【好过分哦】
按照Gosling的说法,该安全漏洞基于如下事实——较早的语言的几个特性与安全性是矛盾的:“C++允许你做出随意的造型(casting),任意地添加images and pointers,而且在指针之间通过非常、非常的非结构化方式转换过来转换过去。”
“如果你看看Java的安全模型和可靠性模型,很多事情都被成为异常处理了,它们真正精确地依赖于对象属性的完整性。因此,如果有人给你一个对象并且说‘这是一个图像’,那么它就是一个图像,它不可能是造型出一个图像的,指向某个流的指针”。Gosling说。
微软的开发者传道士Charles Sterling完完全全的不同意Gosling的评论,因而他试图澄清关于.NET安全性的问题。Sterling指出.NET定义了不同类型的代码,“Managed” code是处于.NET框架的控制之下执行的代码。新的语言如C# and Visual Basic.NET仅仅产生managed code。
然而,Gosling提及的是传统语言如C and C++所产生的“不安全”代码。不安全代码是一些不严格遵循.NET所定义的类型安全性规则的老代码,这类的代码需要附加的许可才能执行。按照Sterling的观点:"you as a developer take it upon yourself" to utilise unsafe code in your .NET applications.
一个重要之处在于,由于一些语言的能力中掺杂了特定机器的特性,那些所谓的不安全代码确实有着比"managed" code运行得更快的潜能,就可能以牺牲平台的移植性以换取速度。Sterling同意这一点,正如他所说的:在两种平台之间选择完全是一种冒险:如果开发者愿意“接受这种不安全代码的冒险”,那么他可以实现出“这个星球上最好性能的系统”。
当被问到他个人了解的情况,.NET开发者是否真的在.NET平台上实现C or C++代码时,Sterling也给这场争辩一个现实的检验。在大约1000个Sterling知道的开发者中,他仅仅能想到个别人直接在C++代码下开发。这是否象征着这一部分开发者不愿意使用不安全的代码呢,还不清楚。