【问题标题】:Why is Java labeled as a "secure" language?为什么 Java 被标记为“安全”语言?
【发布时间】:2010-10-08 19:21:17
【问题描述】:

我想这是一个普遍的问题,但我正在学习 java (SE/ME) 的入门课程,并且学习材料声称 java 经常用于“安全目的”。然而,它并没有通过声称 java 具有良好的安全性来解释它们的含义。

它是防黑客的吗?它是否生产高度稳定的软件?什么?

在我看来(目前)的安全性在于它掌握在编写代码的开发人员手中,而不是语言本身?

【问题讨论】:

  • 你确定他们不是在说“安全”而不是“安全”吗?这是完全不同的两件事。
  • 你能引用你的学习资料吗?在没有更多上下文的情况下,仅说“安全”是相当广泛的。
  • 与讲座相关的演讲为 Java 的强项带来了“安全性”,演讲者接着列出了 Java 在银行系统、股票市场 (nasdaq)、智能卡和更多领域中的用途。
  • Java 有非常好的(我猜是最好的)异常处理机制。您可以在开发时处理所有假设的场景。这使它更安全。

标签: java security


【解决方案1】:

恕我直言,这是一个非常具有误导性的陈述。在 Java 中,您无法访问越界数组,也没有指针,因此在 Java 中无法利用堆栈损坏或缓冲区溢出等安全漏洞。但是 Java 在本质上并不比任何其他语言更安全。只是发生可能导致安全漏洞的错误的机会更少。实际上,这减少了安全漏洞,但说 Java 是安全的完全是一种误导。

【讨论】:

  • 通常,当人们说 Java 是“安全的”时,这正是您所说的原因 - 超出范围的数组和糟糕的指针算法是 C 代码中的两个常见安全错误。
  • 从某种意义上说更安全,危害运行 Java VM(沙箱)的系统的可能性更低。 Lie Ryan 指出,它不会使应用程序本身更安全。也就是说,如果您自己伪造 SQL 查询并且没有正确转义它以及类似的“安全”错误,您仍然可以进行 SQL 注入
  • 所以摆脱过去是 THE 最常见的安全问题原因(缓冲区溢出/溢出)在本质上并不比 C 语言更安全?您在自己的回答中自相矛盾:“Java 本质上并不比任何其他语言更安全”(错误)和“实际上,这减少了安全漏洞”(正确)。那么你选择什么? NOT 因为你没有防范所有安全问题,所以你并不比其他语言更安全。祝你好运逃离 VM Lie Ryan ;)
  • @Webinator,您假设一个最新的 JVM,这不是一个安全的假设。旧的 JVM 容易 逃逸。 This is an increasingly common problem.
【解决方案2】:

有两点让 Java 在某些方面比其他语言“更安全”:

  • 自动数组边界检查和缺乏手动内存管理使得某些类别的编程错误通常会导致严重的安全漏洞(例如缓冲区溢出)成为不可能。大多数其他现代语言都具有此功能,但在 Java 首次出现时占主导地位(并且仍然是主要)应用程序开发语言的 C 和 C++ 却没有。
  • Security Manager 概念使得在“沙箱”中运行 Java 应用程序变得相对容易,从而防止它们对正在运行的系统造成任何损害。这在 Java 早期的推广中发挥了重要作用,因为 Applet 被设想为拥有客户端 Web 应用程序的一种无处不在、安全的方式。

【讨论】:

  • 安全管理器比这更广泛,而且仍然有用。您可以为不同的代码库分配不同的权限。这在您下载一些代码时非常方便。
  • 我听说过从沙盒中逃脱并不难的谣言。
  • @Sami:可能有 Java 版本。 JVM 必须像任何其他与安全相关的大型软件包一样定期获得安全更新。但是绝对没有通用的沙盒破坏方法。
  • 对不起,这有点半开玩笑的评论。但实际上,在非最新版本中逃离沙箱几乎是微不足道的。通常没有公开的方法可以从最新版本的沙盒中逃脱,但我不会太相信它。
  • +1 @Sami。参见,例如,Java: A Gift to Exploit Pack Makers“...针对 Java 漏洞的攻击已迅速成为最畅销的“漏洞利用工具包”作者的头号赚钱工具,这些商业犯罪软件旨在被缝合到被黑或恶意网站中并利用各种Web 浏览器漏洞。”
【解决方案3】:

Java 提供安全保障和工具,例如:

  • 没有缓冲区溢出漏洞
  • 字节码验证
  • 不同代码库的安全权限
  • 与安全相关的 API

更多详情,请参阅 Oracle 的"Java Security Overview"

【讨论】:

    【解决方案4】:

    因为 Java 编译为 bytecode,然后在 Virtual machine 中运行,它无法像本地编译的程序一样访问运行它的计算机。

    【讨论】:

    • 这与编译成 IL 并在 .net 运行时运行的 .net 代码相同。
    • 技术上不正确,因为您可以使用 JNI 访问对系统的本机调用,而 java 程序仍然可以对系统造成严重破坏 - 删除文件、执行命令行参数等。跨度>
    【解决方案5】:

    Java 被认为比 C 更安全的一般原因是它为您处理内存管理。在其他语言中,程序员分配自己的内存并且经常无法正确分配,导致缓冲区溢出等。当然,Java VM 仍然可能包含相同类型的错误,但随着时间的推移,它经过了很好的测试,不像每个用户编写的程序.

    所以在这方面,它更安全。但是您仍然可以编写不安全的代码,因为没有任何语言可以保护您免于编写明显错误的代码。

    【讨论】:

      【解决方案6】:

      几种语言,尤其是 C 和 C++,都有一类错误,可以在被利用时执行任意代码 - 此类错误很常见,而且很容易制作。这些错误通常是某种形式的buffer overflow

      Java 和许多其他语言/平台消除了这类错误(除了 VM 本身中潜在的可利用错误),许多人声称这使其更安全。

      【讨论】:

        【解决方案7】:

        这是营销)

        【讨论】:

        • 优雅的答案:)
        【解决方案8】:
        1. 这是一些采访中提出的基本问题,为什么 java 是安全的,其背后的原因是 java 是安全的,因为在 jvm 中存在一个名为安全管理器的软件 它的职责是处理所有事情,如果发生错误。所以它的控制/预防系统

        2. 另外,它在源代码和系统(操作系统)之间创建接口,并且没有用户做错事的任何权限。

        【讨论】:

        • 这个答案是什么意思?
        【解决方案9】:

        Java 编译器将 Java 代码转换为字节码(.class 文件),然后这些字节码由 Java 虚拟机 (JVM) 运行。 JVM 是一个解释器,它安装在每台客户端机器上,通过互联网使用最新的安全更新进行更新。当这个字节码被执行时,JVM 可以负责安全性。因此,据说 java 比其他编程语言更安全。

        【讨论】:

          【解决方案10】:

          此外,泛型类型(或泛型)在语法和预期用例(例如容器类)方面与 C++ 中的模板有表面上的相似之处。但相似之处只是表面上的——Java 语言中的泛型几乎完全在编译器中实现,编译器执行类型检查和类型推断,然后生成普通的非泛型字节码。这种实现技术,称为擦除(编译器使用泛型类型信息来确保类型安全,然后在生成字节码之前将其擦除),会产生一些令人惊讶的,有时甚至是令人困惑的后果。虽然泛型是 Java 类中类型安全性的一大进步,但学习使用泛型几乎肯定会在此过程中提供一些令人头疼(有时是诅咒)的机会。

          【讨论】:

            【解决方案11】:

            **

            > 为什么 Java 是安全语言

            **

            原因: 1.由于java程序在自己的虚拟机沙箱中运行 2. Java(OOP)中的数据隐藏使其成为安全语言之一。 也许有些点也在那里,但现在想不起来了。

            3.不使用指针防止未经授权访问内存块。

            4.无法访问内存管理

            1. 访问控制功能
            2. 异常处理
            3. 最终关键字的使用
            4. 包 java.security 为安全框架提供类和接口

            在每个阶段都启用了 Java 安全性: 最终关键字 安全类加载 jit 安全管理器 字节码验证 自动内存管理 jsse java加密扩展 电子签名 jaas :java 认证授权服务

            如果你学过这个东西请点赞

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-01-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-11-01
              相关资源
              最近更新 更多