首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否需要定义“语言安全”?

是否需要定义“语言安全”?
EN

Security用户
提问于 2013-03-06 16:12:50
回答 4查看 432关注 0票数 1

当有关于例如Java的警告时,语言安全并没有得到明确的定义。那么,你怎么能说语言不安全,而语言安全却没有得到明确的定义?如果Java现在是不安全的,那么7比2“安全”吗?

EN

回答 4

Security用户

回答已采纳

发布于 2013-03-06 18:17:05

如果有可能在完全尊重语言规范的情况下高效地实现其解释器/编译器/运行时环境,并且仍然强制防止“坏事”发生,那么语言就可以说是“安全的”。那就看你在说什么“坏事”了。

如果您想保护机器不受开发人员编写的代码的影响,Java是“安全的”。数组边界被检查,类型不可回避,内存分配由垃圾收集器处理,这意味着理论上不可能让Java执行攻击者选择的本机代码,不管编写得多么糟糕。在同样的情况下,C是“不安全的”,因为它不能用阻止任意代码执行的检查来完全实现。

当然,在实践中,情况发生了一些变化:使用各种技术(如DEP和ASLR)可以使C代码“更安全”,而操作系统可以在某些特定访问权限下“包含”本机代码(“正常用户”进程不是root)。Java现状表明,虽然Java在理论上是安全的,但Java虚拟机及其运行环境的实现可能存在漏洞。在某种程度上,精确的JVM规范确保了Java的安全实现是困难的(这是Applet模型的一个错误特性:它强制整个标准库中的每个方法控制)。

你不可能有一个一刀切的语言安全的定义,除非你满足于一个主观的口号(COBOL烂!F#规则!永垂不朽!)。这一切都取决于背景。

票数 5
EN

Security用户

发布于 2013-03-06 16:20:15

这里可能有些混乱。编程语言本身并不包含漏洞。是用这些语言编写的程序做到了这一点。

更高级别的语言(如Perl、Java、JavaScript、C#,但不是C或C++)有助于简化编程代码,并允许您编写代码,这样缓冲区溢出是不可能的--这对安全性更好,但是高级语言之间的安全差别很小。

在Java的例子中,有一个沙盒并没有被证明是完全有效的。这个沙箱的目的是允许用Java编写程序,然后在浏览器中运行,而不需要访问正在运行的计算机。有安全问题的是Java沙箱,而不是Java本身。我不能说Java 7和Java 2之间的比较。

票数 4
EN

Security用户

发布于 2013-03-06 18:04:37

基于一些属性,语言被归类为安全和不安全。您所说的安全语言至少包括以下属性:

  1. 类型安全性:所有变量都属于特定类型(int、float、string等),并且具有明确定义的最小和最大长度值。
  2. 绑定检查:在执行数组操作之前检查数组边界。这意味着,除了最小数组位置(即零)和最大数组位置之外,不允许操作访问数组对象。
  3. 自动内存管理:内存管理(如分配/去允许)由运行时自动执行。这也被称为垃圾收集。当代码块超出作用域时,所有变量都会自动释放。
  4. 沙盒环境:程序在受限的环境中运行,不能与操作系统和/或文件系统直接交互。

Java语言具有所有这些属性,因此很容易被归类为“安全”语言。您提到的不安全不是因为语言本身,而是由于不安全的沙箱环境和不安全的库调用。除去最近的Java攻击代码,它所做的就是绕过安全限制来调用特权类代码。它与语言本身的不安全性无关,而是与java库的复杂和不安全的设计有关。

票数 3
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/32110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档