第 1 章 概 述
关于软件漏洞和软件漏洞利用的报告越来越多,并继续以惊人的速度增长。相当多的这类报告导致了技术安全上的警报。这一威胁日益严重影响了公司、教育机构、政府和个人,为了解决这一问题,开发出来的系统应该是不包含那些软件安全漏洞的。
编码错误会导致大多数软件安全漏洞。比如,2004年在国家安全漏洞数据库(National Vulnerability Database)中记录的近2500个漏洞,有64%是由错误的编程引起的[Heffley 2004]。
相对来说,Java是一种较为安全的语言。因为它没有显式指针操作;对数组和字符串边界有自动检查机制;如果尝试引用一个空指针会抛出系统异常;算术运算是明确定义的且与平台无关,类型转换也是如此。内置的字节码验证器可以确保这些检查会在正确的地方执行。此外,Java还提供全面的、细粒度的安全机制,这个安全机制控制着对单个文件、套接字和其他敏感资源的访问。为从这种安全机制中获益,JVM(Java Virtual Machine, Java虚拟机)特地设计了一个安全管理器。这个安全管理器是类java.lang. Security Manager(或它的子类)的一个对象,我们可以基于它进行编程,但通过命令行参数来操作它是更为常见的使用方式。
尽管Java在编程上是安全的,但这并不意味可以一劳永逸。本章的剩余部分会介绍一些例子,通过这些例子我们可以看到,在某些情况下,程序可能会被利用而产生安全问题,同时会介绍怎样借助规则的帮助来减轻安全攻击对程序的影响。并不是所有的规则都适用于所有的Java语言所编写的程序;通常,规则的适用性取决于软件的部署情况和受信的假设。