java - java作为安全语言的解释?

标签 java c++ metaprogramming

<分区>

有人可以帮助我理解以下攻击是什么以及 java 如何使这些攻击不可能:

  1. overrunning the routine stack- a common attack of worms and viruses
  2. corrupting memory outside its own process space
  3. reading or writing files without permission.

我精通 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 - java作为安全语言的解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13836569/

相关文章:

java - 尝试在多个实例上运行批处理作业时出现 DuplicateKey 异常

c++ - 用于 C++ 的套接字 API 或库?

c++ - 从正交投影平滑过渡到透视投影?

c++ - 模板结构的静态常量成员的不同值

javascript - 如何在与事件 Vaadin 不同的类中建立点击监听器

java - 不同高度尺寸的射线铸件

c++ - 识别主要页面错误原因

ruby - 将字符串作为表达式求值

metaprogramming - CoffeeScript动态方法

java - Hibernate @Lob on byte[] 导致 "Bad value for type long"