<分区>
有人可以帮助我理解以下攻击是什么以及 java 如何使这些攻击不可能:
- overrunning the routine stack- a common attack of worms and viruses
- corrupting memory outside its own process space
- reading or writing files without permission.
我精通 c/c++ 并从 java 开始,所以请帮助我理解这些。
<分区>
有人可以帮助我理解以下攻击是什么以及 java 如何使这些攻击不可能:
- overrunning the routine stack- a common attack of worms and viruses
- corrupting memory outside its own process space
- reading or writing files without permission.
我精通 c/c++ 并从 java 开始,所以请帮助我理解这些。
最佳答案
首先,安全问题更多的是 实现,而不是语言。 Java确实强加了一些 可选的安全检查(边界检查等)(和 在运行时非常昂贵)在 C++ 中。关于你的 具体问题:
我认为这是指典型的缓冲区溢出问题,
这在 C 中经常是个问题。在 C++ 中,我们使用 std::vector
,
哪个可以(并且通常会这样做,至少当正确的编译器
选项)做与 Java 相同的检查。如果,另一方面
另一方面,它确实指的是堆栈溢出(例如,由于太多
深度递归),那么因为 JVM 的栈不是
机器栈,Java可以做额外的检查,也保证
堆栈溢出时出现内存不足异常。 (这是
在 C++ 中也可能,但我不知道有哪个编译器可以
它。而且操作系统并不总是那么容易。)
这是一个操作系统问题,而不是语言问题。现代操作系统 不允许程序访问自己以外的内存 进程空间,因此 Java 和 C++ 都不允许。
如上所述,这是一个操作系统问题,而不是语言问题,并且 现代操作系统的执行相对较好,无论是否 该程序是用 Java 或 C++ 编写的。
综上所述,2和3都是不可能的,无论 语言,并且 1 不会出现在编写良好的 C++ 中(尽管它是 C过去的一个问题)。
关于java - java作为安全语言的解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13836569/