前 言
在Java编程语言中,关键的安全编码要素是采用良好的文档和强制的编码规范。本书提供了在Java语言中的一系列安全编码规则。这些规则的目标是消除不安全的编码实践,因为这些不安全的因素会导致可利用的漏洞。如果应用这些安全编码标准,可以帮助设计出安全的、可靠的、健壮的、有弹性的、可用性和可维护性高的高质量系统,并且这些安全编码规范还可作为评估源代码质量特性的一个指标(不管使用的是手动的还是自动化的过程)。对于使用Java编程语言开发的软件系统,这个编码规范具有广泛的影响。
目 录
第1章 概述
1.1 错位的信任
1.2 注入攻击
1.3 敏感数据泄露
1.4 效能泄露
1.5 拒绝服务
1.6 序列化
1.7 并发性、可见性和内存
1.8 最低权限原则
1.9 安全管理器
1.10 类装载器
1.11 小结
第2章 输入验证和数据净化(IDS)
2.1 IDS00-J净化穿越受信边界的非受信数据
2.2 IDS01-J验证前标准化字符串
2.3 IDS02-J在验证之前标准化路径名
2.4 IDS03-J不要记录未经净化的用户输入
2.5 IDS04-J限制传递给ZipInputStream的文件大小
2.6 IDS05-J使用ASCII字符集的子集作为文件名和路径名
2.7 IDS06-J从格式字符串中排除用户输入
2.8 IDS07-J不要向Runtime.exec()?方法传递非受信、未净化的数据
2.9 IDS08-J净化传递给正则表达式的非受信数据
2.10 DS09-J如果没有指定适当的locale,不要使用locale相关方法处理与locale相关的数据
2.11 IDS10-J不要拆分两种数据结构中的字符串
2.12 IDS11-J在验证前去掉非字符码点
2.13 IDS12-J在不同的字符编码中无损转换字符串数据
2.14 IDS13-J在文件或者网络I/O两端使用兼容的编码方式
第3章 声明和初始化(DCL)
3.1 DCL00-J防止类的循环初始化
3.2 DCL01-J不要重用Java标准库的已经公开的标识
3.3 DCL02-J将所有增强for语句的循环变量声明为final类型
第4章 表达式(EXP)
4.1 EXP00-J不要忽略方法的返回值
4.2 EXP01-J不要解引用空指针
4.3 EXP02-J使用两个参数的Arrays.equals()方法来比较两个数组的内容
4.4 EXP03-J不要用相等操作符来比较两个基础数据类型的值
4.5 EXP04-J确保使用正确的类型来自动封装数值
4.6 EXP05-J不要在一个表达式中对同一变量进行多次写入
4.7 EXP06-J不要在断言中使用有副作用的表达式