Java沙盒环境与C形成对比

时间:2011-12-15 23:52:14

标签: java c sandbox

  

Java设计为在“沙盒”环境中运行,而C则不受约束。从安全的角度讨论这种影响。

我对这个概念做了一些研究。我发现如果它是在沙盒上运行Java,它会通过一个更受控制的门来从内存的不同部分检索信息。但是,在C中,它并不是不受控制的地方。

有人可以解释一下我还能添加其他内容吗?

编辑:

这是我添加的内容:

Java编程语言是一种面向对象的语言,专门设计为具有尽可能少的实现依赖性。 Java编写一次多次部署模型。它表面上看起来像C / C ++ / C#但具有不同的底层对象模型。有许多Java版本,例如Java Standard Edition(Java SE),Java Mobile Edition(Java ME),Java Enterprise Edition(Java EE)等。

用java编写的应用程序被编译为Java字节代码,这是一种独立于任何平台的中间语言。因此,编译器可以在多平台上工作。

虚拟机编译和执行模型通过在Java虚拟机(JVM)上运行编译代码(Java字节代码)来工作。 Java虚拟机解释Java字节代码并提供可以执行Java字节代码的环境。在所有平台上对所有JVM使用相同的字节代码允许将Java描述为“一次编写,随处运行”。

这是比生成本机代码的编译器更好的模型,原因如下:

  1. 移动设备具有各种形状和大小,并具有不同的处理器速度和架构。因此,一旦在设备上实现JVM,编译和执行的虚拟机模型允许所有Java应用程序在各种不同的移动平台上运行。

  2. 虚拟机编译模式提供了一个独立于平台的编程环境,可以抽象出底层硬件或操作系统的细节,并允许程序在任何平台上以相同的方式执行。

  3. 通过使用即时编译(一种提高计算机程序运行时性能的方法),可以实现与编译编程语言相当的性能。

  4. 从字节代码到机器代码的编译比从源代码编译要快得多。

  5. 部署的字节代码是可移植的,与本机代码不同。

  6. 由于运行时可以控制编译,例如解释的字节代码,因此它可以在安全的沙箱中运行。从字节代码到机器代码的编译器更容易编写,因为可移植字节代码编译器已经完成了大部分工作。

3 个答案:

答案 0 :(得分:2)

不要混合语言和虚拟化。

Google的Native Client(NaCL)是一个用于C / C ++(以及其他所有)程序的沙盒环境。

答案 1 :(得分:2)

这是对沙盒代码最常见的安全挑战的“快速抽样”,这是我的头脑。

在一个沙盒应用程序中。将在以下领域增加限制:

  • 打印。
  • 跨域资源访问。
  • 复制/粘贴。
  • 从/向本地文件系统导入/导出资源。
  • 小程序呼叫System.exit(n)
  • 从JavaScript调用applet方法..
  • 附加到自由浮动元素的警告。哪些甚至可以应用于应用的工具提示。使用第三方PLAF。
  • 访问各种属性(例如user.*,任意数量的java.*道具)
  • 加载和使用原生代码(应该很明显)。
  • 启动流程。
  • 重定向输出或错误流。
  • 录制声音或视频。
  • 访问Robot
  • ..

如果这个问题与“安全性”有关,那么你需要做很多研究。 ;)

答案 2 :(得分:0)

Java本质上是“沙盒”,而C ++等不是。在Java中,没有办法超出对象 - 例如,你无法自由地将对象指针转换为char*,并且你无法在数组末尾之外进行寻址。

对系统设施的访问受到多种方式的限制(其中一些我刚才忘记了)。但基本上可以运行一个加载安全类加载器之类的Java程序,然后在该环境中加载的任何应用程序都被“锁定”,并且不能做任何你不希望它做的事情。

(事实上,IBM iSeries上的“经典”JVM利用这些功能来防止“主”Java程序运行困难.Java代码运行在与操作系统相同的地址空间中,但操作系统仍然是受Java固有的安全保护。)

在C ++等人中,为了完成同样的事情,您要么必须使用存储保护硬件,要么使用编译器来编译每次访问的检查。