【问题标题】:Why Java is secure compared with other programming languages? [closed]与其他编程语言相比,为什么 Java 更安全? [关闭]
【发布时间】:2013-01-08 07:09:20
【问题描述】:

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

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

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

  1. 编写 .net 程序。
  2. 将您的代码编译为 MSIL(编译将您的源代码翻译为 Microsoft 中间语言 (MSIL) 并生成所需的元数据)。
  3. 将 MSIL 编译为本机代码(在执行时,即时 (JIT) 编译器将 MSIL 转换为本机代码。在此编译期间,代码必须通过检查 MSIL 和元数据的验证过程找出是否可以确定代码是类型安全的)。
  4. 运行代码(公共语言运行时提供能够执行的基础架构和可在执行期间使用的服务)。

java编程涉及的步骤 Click to know more

  1. 编写 Java 程序
  2. 编译Java程序(Java编译器将java源代码转换为.class文件,即字节码)
  3. JVM加载程序到内存(JVM加载.class文件到内存做字节码校验,将.clss文件转成机器语言)
  4. Java 程序的执行(无论我们在 Java 程序中编写了什么操作,JVM 通过解释字节码来执行它们。如果我们谈论旧的 JVM,它们速度很慢,一次执行并解释一个字节码。现代 JVM使用 JIT 编译单元,我们甚至称之为即时编译)。

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

【问题讨论】:

  • 引用参考文献也是你在哪里读到的。
  • 我现在想到的一点是,在 .net 中,您仍然可以编写不会在 CLR 之上运行的“非托管代码”,而在 Java 中,无论您编写什么都将运行仅在 JRE 之上。
  • 是的,参考(或链接)将有助于其他人理解为什么有人这么说。
  • 定义“其他”...计算机世界中的语言比您提到的几种语言还要多。也许原始引用是在谈论 Java vs C,或者 Java vs Ada(可能会是其他方式:))
  • Java 比以前的语言更安全。 .net 出现在 Java 之后,并且有许多最好的想法。也就是说 .net 有更多方法可以突破安全编码,因此编写不安全的程序要容易得多(你也可以在 java 中)

标签: java .net security programming-languages


【解决方案1】:

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

Java 具有多种安全特性:

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

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

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

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

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

希望这会有所帮助!

【讨论】:

  • 如果you're feeling evil,你可以在Java中改变字符串,所以第4点不正确。当你以通常的方式做事时,它肯定会强制执行它,但会给你一种虚假的安全感。
  • @TimS。安装适当的安全管理后,该代码将触发安全异常并失败。
【解决方案2】:

你提到你在哪里读过一些,但你能重新读一下吗,因为我猜作者在写它的时候会将 JAVA 与 C++/Fortran/C 等进行比较。

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

你可以看到两者几乎相同......

【讨论】:

  • 是的,我们从不知道其他人也可能意味着 php.. :)
  • 修改问题并添加链接。
  • 谢谢 Dharmavir...你是 Gaurang Gajjar 的朋友吗?
【解决方案3】:

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

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

【讨论】:

  • 答案仍然是“它并不比其他语言(包括 .Net)更安全”,您被误导了。
猜你喜欢
  • 2014-08-12
  • 1970-01-01
  • 2011-04-24
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
相关资源
最近更新 更多