与其他编程语言相比,为什么Java是安全的?

Java供应商和社区称“Java比其他语言更安全” 。 但我想知道怎么做?

如果我们看看Java和.Net中的编程,它们看起来很相似。

.net编程中涉及的步骤 单击以了解更多信息

  1. 写.net程序。
  2. 将代码编译为MSIL (编译将源代码转换为Microsoft中间语言(MSIL)并生成所需的元数据)。
  3. 将MSIL编译为本机代码 (在执行时,实时(JIT)编译器将MSIL转换为本机代码。在此编译期间,代码必须通过validation过程,该过程检查MSIL和元数据以查明代码是否可以被确定为类型安全)。
  4. 运行代码 (公共语言运行库提供了允许执行的基础结构和可在执行期间使用的服务)。

java编程中涉及的步骤 单击以了解更多信息

  1. 编写Java程序
  2. 编译Java程序 (Java编译器将java源代码转换为.class文件,这是一个字节代码)
  3. 程序通过JVM加载到内存中 (JVM将.class文件加载到内存中进行字节码validation并以机器语言转换.clsss文件)
  4. Java程序的执行 (无论我们在Java程序中编写什么动作,JVM通过解释字节码来执行它们。如果我们谈论旧的JVM,它们很慢,一次执行和解释一个字节码。现代JVM使用JIT编译单元我们甚至调用即时编译)。

如果我们看两种语言中的步骤几乎相同,那么“为什么Java与其他语言相比更安全?”

Java是一种安全的语言有很多原因,它肯定比某些语言更安全,但我认为它比所有其他语言更安全。

Java具有各种安全function:

  1. 引用的自动空检查,数组的边界检查,强制转换的validation等,以防止程序产生类型错误。 将此与C或C ++进行比较,其中这些相同的错误(除少数例外)导致未定义的行为。

  2. 执行前validation字节码。 这使得程序无法跳转到未定义的指令,或者尝试对不存在的对象执行操作,或者在指令级别发生类型错误等。将此与C或程序集进行比较,程序可以跳转到错误的指令,或尝试读取不存在的参数到函数(想想va_args )等。)

  3. 加载新代码时运行时安全性检查。 使用SecurityManagerClassLoader可以使Java运行时通过调解对系统资源的访问并防止程序在运行时加载或生成任意代码来防止任意代码在计算机上执行。 将其与C或C ++进行比较,C或C ++可以读取和写入任意值,发出任意系统调用,生成和执行任意代码等。

  4. 某些function的库级安全性。 例如, String是不可变的和final ,因此接收String的函数可以validation字符串,而不必担心另一个线程更改其值。

这不是Java安全function的完整列表,但它应该让您了解Java中一些其他语言中没有的设计注意事项。

希望这可以帮助!

你提到你在哪里阅读,但是你可以重新阅读它,因为我猜它写的时候作者会将JAVA与C ++ / Fortran / C等进行比较。

您还可以在http://www.veracode.com/blog/2010/06/which-tastes-better-for-security-java-or-net/上阅读有关安全性可测试性的旧post。

你可以看到两者差不多……

与C等相比,Java或.Net程序不受一些简单类型的安全漏洞的影响 – 缓冲区溢出或格式化字符串错误。

虽然这摆脱了可以获得远程代码执行的某些方式,但Java没有做任何事情来阻止,例如,任何Web应用程序漏洞。 它也没有帮助解决逻辑错误。