Fred Long 英国Aberystwyth大学计算机科学系的高级讲师,自1992年起一直担任软件工程研究所(Software Engineering Institute)的客座科学家。
Dhruv Mohindra 印度Persistent Systems有限公司安全实践小组的技术领导,为金融、电信、健康领域的很多公司提供咨询服务。
Robert C. Seacord 出版过多本软件安全与软件工程方面的书籍,是CERT安全编码倡议小组的技术经理,另外他还在卡内基-梅隆大学教计算机科学。
Dean F. Sutherland CERT高级软件安全工程师,之前是Tartan公司技术组的高级成员,他在Tartan公司主要负责开发优化编译器。
David Svoboda CERT软件安全工程师,是多个CMU项目的主要开发者。
译者简介
译者简介
刘先宁 ThoughtWorks高级咨询师,长期从事一线软件开发工作,对Java、面向对象、敏捷方法论都有较深理解。其译作还包括《HTML5移动Web开发实战》。
尤青松 ThoughtWorks咨询师,在敏捷软件交付团队中担任技术领导人,尤其对Java企业软件开发及其安全编程有较深理解。
第1章 安全 1
指南1:限制敏感数据的生命周期 1
指南2:不要在客户端存储未经加密的敏感数据 5
指南3:为敏感可变类提供不可修改的包装器 10
指南4:确保安全敏感方法被调用时参数经过验证 12
指南5:防止任意文件上传 14
指南6:正确地编码或转义输出 17
指南7:防止代码注入 22
指南8:防止XPath注入 25
指南9:防止LDAP注入 30
指南10:不要使用clone()方法来复制不可信的方法参数 34
指南11:不要使用Object.equals()来比较密钥 37
指南12:不要使用不安全的弱加密算法 39
指南13:使用散列函数存储密码 41
指南14:确保SecureRandom正确地选择随机数种子 46
指南15:不要依赖可以被不可信代码覆盖的方法 47
指南16:避免授予过多特权 55
指南17:*小化特权代码 59
指南18:不要将使用降低安全性检查的方法暴露给不可信代码 61
指南19:对细粒度的安全定义自定义安全权限 70
指南20:使用安全管理器创建一个安全的沙盒 74
指南21:不要让不可信代码误用回调方法的特权 78
第2章 防御式编程 85
指南22:*小化变量的作用域 85
指南23:*小化@SuppressWarnings注解的作用域 88
指南24:*小化类及其成员的可访问性 91
指南25:文档化代码的线程安全性 96
指南26:为方法的结果值提供反馈 103
指南27:使用多个文件属性识别文件 106
指南28:不要赋予枚举常量的序号任何特殊意义 114
指南29:注意数字提升行为 116
指南30:对可变参数的类型做编译时类型检查 121
指南31:不要把其值在以后版本里可能会发生变化的常量设置为public final 124
指南32:避免包之间的循环依赖 127
指南33:使用用户自定义的异常而非宽泛的异常类型 130
指南34:尽量从系统错误中优雅恢复 133
指南35:发布接口前请谨慎设计 135
指南36:编写对垃圾收集机制友好的代码 138
第3章 可靠性 142
指南37:不要在子作用域里遮蔽或者掩盖标识符 142
指南38:不要在一个声明里声明多个变量 145
指南39:在程序逻辑中用有意义的符号常量代表文字值 148
指南40:在常量定义中恰当地表示相互之间的关系 153
指南41:对于返回数组或者集合的方法,用返回一个空数组或者集合来替代返回一个空值 154
指南42:只在异常的情况下使用异常 157
指南43:转义 245
指南72:不要使用重载的方法来区分运行时类型 248
指南73:不要弄混引用的不可变性和对象的不可变性 251
指南74:谨慎使用序列化方法writeUnshared()和readUnshared() 257
指南75:不要试图通过把
¥149.00¥298.00
¥399.00
¥29.00
¥249.00¥498.00