moh*_*hit 5 c++ java metaprogramming
有人可以帮助我理解以下攻击是什么以及java如何使这些攻击变得不可能:
- 超越例程堆栈 - 蠕虫和病毒的常见攻击
- 在自己的进程空间之外破坏内存
- 未经许可读取或写入文件.
我精通c/c ++并从java开始,所以请帮助我理解这些.
Java是一种相当安全的语言,因为有几个原因,主要集中在你的3点上,Java比其他语言更安全,主要是因为它在自己的虚拟机中执行字节码指令,而不是本机代码.它不允许超出范围的数组访问,并且没有指针访问权限.这几乎可以回答你的前两点.至于未经许可的阅读和写作,我不确定你的意思.固有的文件读取和写入在操作系统级别进行控制.如果没有一些利用来获得比它应该获得的更多许可,无论它写入什么语言,程序都无法写入或读取操作系统禁止的文件.如果您的意思是未经应用程序的许可,从插件系统开始,那么您需要考虑添加安全管理器或您自己的审查,以防止插件或模块在您的应用程序进程下更改文件.
首先,安全问题更多是实现问题,而不是语言问题。Java确实强加了一些安全检查(边界检查等),这些检查在C ++中是可选的(在运行时非常昂贵)。关于您的特定问题:
我认为这是经典缓冲区溢出问题,这在C语言中经常是个问题。在C ++中,我们使用std::vector,它可以(通常至少在给出正确的编译器选项时才这样做)执行与Java相同的检查。另一方面,如果它确实是指堆栈溢出(例如,由于深度递归的结果),则由于JVM的堆栈不是机器堆栈,因此Java可以进行额外的检查,并确保内存不足堆栈溢出的情况下的异常。(这在C ++中也是可能的,但是我不知道执行此操作的编译器。而且操作系统并不总是那么容易做到这一点。)
这是操作系统问题,而不是语言问题。现代操作系统不允许程序访问其自己的进程空间之外的内存,因此Java和C ++均不允许。
如上所述,这是一个操作系统问题,而不是语言问题,现代操作系统对它的执行相对较好,无论该程序是用Java还是用C ++编写的。
总而言之,无论使用哪种语言,2和3都是不可能的,并且在编写良好的C ++中不会出现1(尽管过去使用C是一个问题)。