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

时间:2013-01-08 07:09:20

标签: java .net security programming-languages

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

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

.net编程中涉及的步骤 Click to know more

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

    1. 编写Java程序
    2. 编译Java程序(Java编译器将java源代码转换为.class文件,这是一个字节代码)
    3. 程序通过JVM加载到内存中(JVM将.class文件加载到内存中进行字节码验证并以机器语言转换.clsss文件)
    4. 执行Java程序(无论我们在Java程序中编写什么操作,JVM都会通过解释字节码来执行它们。如果我们谈论旧JVM,它们很慢,一次执行和解释一个字节码现代JVM使用JIT编译单元,我们甚至称之为即时编译。
    5. 如果我们看两种语言中的步骤几乎相同,那么“为什么Java与其他语言相比更安全?”

3 个答案:

答案 0 :(得分:11)

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

Java具有各种安全功能:

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

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

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

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

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

    希望这有帮助!

答案 1 :(得分:3)

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

还有一篇旧文章,您可以在http://www.veracode.com/blog/2010/06/which-tastes-better-for-security-java-or-net/

中阅读有关安全性的可测试性的信息 你可以看到两者差不多......

答案 2 :(得分:2)

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

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