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

为什么Java与其他编程语言相比是安全的?,java,.net,security,programming-languages,Java,.net,Security,Programming Languages,Java供应商和社区表示“Java比其他语言更安全”。但我想知道怎么做 如果我们看看Java和.Net中的编程,它们看起来很相似 涉及.net编程的步骤 编写.net程序。 将代码编译为MSIL(编译将源代码转换为Microsoft中间语言(MSIL)并生成所需的元数据) 将MSIL编译为本机代码(在执行时,即时(JIT)编译器将MSIL转换为本机代码。在此编译过程中,代码必须通过检查MSIL和元数据的验证过程,以确定代码是否可以确定为类型安全的) 运行代码(公共语言运行库提供了支持执行的基础结

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

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

涉及.net编程的步骤

  • 编写.net程序。
  • 将代码编译为MSIL(编译将源代码转换为Microsoft中间语言(MSIL)并生成所需的元数据)
  • 将MSIL编译为本机代码(在执行时,即时(JIT)编译器将MSIL转换为本机代码。在此编译过程中,代码必须通过检查MSIL和元数据的验证过程,以确定代码是否可以确定为类型安全的)
  • 运行代码(公共语言运行库提供了支持执行的基础结构和执行期间可以使用的服务)
  • java编程中涉及的步骤

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

  • <如果我们在两种语言中都看一下步骤,那么它们就几乎相同了,那么为什么“java与其他语言相比更安全?”<强> > /p> < p>你提到你读到的一些地方,但是你能重新阅读它吗?因为我猜当它被写的时候,作者会把java与C++ +/Fortran /c等比较:

    还有一篇关于安全性的可测试性的老文章,你可以阅读


    您可以看到,两者几乎相同……

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


    虽然这消除了一些可以获得远程代码执行的方法,但Java并没有采取任何措施来防止(例如)任何web应用程序漏洞。它对逻辑错误也没有帮助。

    Java之所以是一种安全的语言有很多原因,而且它肯定比某些语言更安全,但我认为说它比所有其他语言都安全是言过其实的

    Java具有多种安全功能:

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

  • 在执行之前验证字节码。这使得程序无法跳转到未定义的指令,或尝试在不存在的对象上执行操作,或在指令级发生类型错误等。将其与C或汇编进行比较,程序可以跳转到错误的指令,或尝试将不存在的参数读入函数(想想看,
    va_args
    ),等等)

  • 加载新代码时进行运行时安全检查。使用
    SecurityManager
    ClassLoader
    可以很容易地让Java运行时通过调解对系统资源的访问,防止程序在运行时加载或生成任意代码,从而防止任意代码在计算机上执行。与C或C++相比,它可以读写任意值,发出任意的系统调用,生成和执行任意代码等。
  • 某些功能的库级安全性。例如,
    String
    是不可变的,
    final
    ,因此接收
    字符串的函数可以验证字符串,而不必担心另一个线程更改其值

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


    希望这有帮助

    引用你在哪里读到的参考文献。我现在想到的一点是,在.net中,你仍然可以编写“非托管代码”,它不会在CLR上运行,而在Java中,你编写的任何东西都只会在JRE上运行。是的,参考文献(或链接)将有助于其他人理解为什么你会这么说。定义“其他”。。。计算机世界中的语言比你们提到的几种语言还要多。也许最初的引语是关于Java vs C,或者Java vs Ada(可能是另一种说法:),Java比以前的语言更安全。net是继Java之后出现的,它有许多最好的想法。也就是说.net有更多的方法来突破安全编码,因此编写一个不安全的程序(你也可以用java编写)要容易得多。是的,我们永远不知道,他们可能也指php:)修改了问题并添加了链接。谢谢达尔玛维。。。你是Gaurang Gajjar的朋友吗?答案仍然是“它并不比其他语言(包括.Net)更安全”,你得到了错误的信息。如果你可以在Java中变异字符串,那么第4点就不是真的。“当你以通常的方式做事时,它肯定会强制执行,但会给你一种虚假的安全感”。@TimS。安装了适当的安全管理器后,该代码将触发安全异常并失败。