当有关于例如Java的警告时,语言安全并没有得到明确的定义。那么,你怎么能说语言不安全,而语言安全却没有得到明确的定义?如果Java现在是不安全的,那么7比2“安全”吗?
发布于 2013-03-06 18:17:05
如果有可能在完全尊重语言规范的情况下高效地实现其解释器/编译器/运行时环境,并且仍然强制防止“坏事”发生,那么语言就可以说是“安全的”。那就看你在说什么“坏事”了。
如果您想保护机器不受开发人员编写的代码的影响,Java是“安全的”。数组边界被检查,类型不可回避,内存分配由垃圾收集器处理,这意味着理论上不可能让Java执行攻击者选择的本机代码,不管编写得多么糟糕。在同样的情况下,C是“不安全的”,因为它不能用阻止任意代码执行的检查来完全实现。
当然,在实践中,情况发生了一些变化:使用各种技术(如DEP和ASLR)可以使C代码“更安全”,而操作系统可以在某些特定访问权限下“包含”本机代码(“正常用户”进程不是root)。Java现状表明,虽然Java在理论上是安全的,但Java虚拟机及其运行环境的实现可能存在漏洞。在某种程度上,精确的JVM规范确保了Java的安全实现是困难的(这是Applet模型的一个错误特性:它强制整个标准库中的每个方法控制)。
你不可能有一个一刀切的语言安全的定义,除非你满足于一个主观的口号(COBOL烂!F#规则!永垂不朽!)。这一切都取决于背景。
发布于 2013-03-06 16:20:15
这里可能有些混乱。编程语言本身并不包含漏洞。是用这些语言编写的程序做到了这一点。
更高级别的语言(如Perl、Java、JavaScript、C#,但不是C或C++)有助于简化编程代码,并允许您编写代码,这样缓冲区溢出是不可能的--这对安全性更好,但是高级语言之间的安全差别很小。
在Java的例子中,有一个沙盒并没有被证明是完全有效的。这个沙箱的目的是允许用Java编写程序,然后在浏览器中运行,而不需要访问正在运行的计算机。有安全问题的是Java沙箱,而不是Java本身。我不能说Java 7和Java 2之间的比较。
发布于 2013-03-06 18:04:37
基于一些属性,语言被归类为安全和不安全。您所说的安全语言至少包括以下属性:
Java语言具有所有这些属性,因此很容易被归类为“安全”语言。您提到的不安全不是因为语言本身,而是由于不安全的沙箱环境和不安全的库调用。除去最近的Java攻击代码,它所做的就是绕过安全限制来调用特权类代码。它与语言本身的不安全性无关,而是与java库的复杂和不安全的设计有关。
https://security.stackexchange.com/questions/32110
复制相似问题