解释Java作为一种安全语言?

explanation to java as a secure language?

本文关键字:一种 安全 语言 Java 解释      更新时间:2023-10-16

有人可以帮助我了解以下攻击是什么以及Java如何使这些攻击变得不可能:

  1. 超越例行堆栈 - 蠕虫和病毒的常见攻击
  2. 损坏其自身进程空间之外的内存
  3. 未经许可读取或写入文件。

我精通c/c ++并从java开始,所以请帮助我理解这些。

首先,安全问题更多的是 实现,而不是语言。 Java确实强加了一些 可选(和 运行时非常昂贵)在C++。 关于您的 具体问题:

  1. 我认为这是指经典的缓冲区溢出问题, 这在 C 中通常是一个问题。 在C++中,我们使用std::vector, 可以(并且通常这样做,至少当正确的编译器时 选项给出)执行与 Java 相同的检查。 如果,另一方面 手,它确实指的是堆栈溢出(例如,由于 深度递归),那么因为 JVM 的堆栈不是 机器堆栈,Java可以做额外的检查,还可以保证 堆栈溢出时的内存不足异常。 (这是 在C++中也可以,但我不知道有哪个编译器可以 它。 而且操作系统并不总是让它变得那么容易。

  2. 这是操作系统问题,而不是语言问题。 现代操作系统 不允许程序访问自身内存之外的内存 进程空间,所以Java和C++都不允许。

  3. 如上所述,这是操作系统问题,而不是语言问题,并且 现代操作系统相对很好地执行了它,无论是否 该程序是用Java或C++编写的。

总之,2 和 3 都是不可能的,无论 语言,并且 1 不会出现在写得很好的C++中(尽管它是 过去 C 的问题)。

Java是一种相当安全的语言,原因有几个,主要集中在你的 3 点上,Java 比其他语言更安全,主要是因为它在自己的虚拟机中执行字节码指令,而不是本机代码。它不允许越界数组访问,并且没有指针访问。这几乎回答了你的前 2 点。 至于未经许可的阅读和写作,我不确定你的意思。文件读取和写入本质上是在操作系统级别控制的。如果没有一些漏洞来获得比它应该得到的更多的权限,无论它是用什么语言编写的,程序都无法写入或读取操作系统禁止它的文件。如果您的意思是从应用程序的角度来看未经许可,例如从插件系统的角度来看,那么您需要考虑添加安全管理器或您自己的审查,以防止插件或模块更改应用程序进程下的文件。

安全性是相对的。当Java在虚拟机中运行时,它可以保护它自己解决C语言中的一些经典问题。

超越例行堆栈 - 蠕虫和病毒的常见攻击

Java有一个定义的行为,抛出一个StackOverflowError,你不能绕过这一点。

损坏其自身进程空间之外的内存

恕我直言,这确实是一个操作系统考虑因素。 即使在 C 语言中,您的操作系统也可以保护您的进程不被修改其他进程的内存。 Java 保护您,无论操作系统是否提供此功能,我都不允许您访问任意内存位置。 大多数现代操作系统都提供这种保护。

未经许可读取或写入文件。

同样,您的操作系统可以保护您免于在 C 中执行此操作,并且应该是您的第一道防线。 Java所做的是允许你运行不受信任的代码,并保护你的文件,即使你可以访问它们,但阻止你的一个程序访问它们。 Java有两种机制,SecurityManager和AccessControl。