我最近刚读完在CERT工作的 Brian Seacord的 C 和 C++ 中的安全编码。
总的来说,这是一本很棒的书,我会推荐给任何还没有读过它的程序员。读完后,我突然想到,对于各种类型的安全漏洞(例如漏洞利用代码注入、缓冲区溢出、整数溢出、字符串格式化漏洞等),每一个安全漏洞似乎都归结为一件事:访问不受进程合法分配的缓冲区限制的内存地址的能力。
注入恶意代码或重新路由程序逻辑的能力完全取决于能否访问合法分配的缓冲区之外的内存地址。但在像 Java 这样的语言中,这根本是不可能的。可能发生的最坏情况是程序将以 终止ArrayIndexOutOfBoundsException
,从而导致拒绝服务。
那么在 Java 等“安全”语言中是否存在任何安全漏洞,无法进行无效内存访问?(我在这里以 Java 为例,但我真的很想知道任何语言中的安全漏洞,这些漏洞会阻止无效的内存访问。)