全世界有很多组织依靠Java代码来执行关键任务,因此这些任务的代码必须可靠、健壮、运行快、可维护,并且安全。本书汇聚了专家们提出的编码指南、建议以及代码示例来帮助大家满足这些需求。
本书中的编码指南对专家安全建议进行了扩展,阐述了更多有价值的新内容。
Fred Long、Dhruv Mohindra、Robert C.Seacord、Dean F.Sutherland、David Svoboda编著的《Java编码指南(编写安全可靠程序的75条建议英文版)》为读者提供了75条编码指南,每一条指南的描述结构都是一致的、直观的。每一条指南都有遵从性的要求,大多数指南还提供了违规代码示例和合规解决方案。作者还指明了每条指南的适用场景,并提供了了解更多详细信息的参考资源。
本书体现了Java安全领域的最新研究成果,提供了很多最新的防护技巧,既能防护故意的攻击,也能防护一些意外导致的事件。本书还提供了构建可靠软件的最佳实践,甚至还用一整章描述了一些常见的会导致代码不完美的误解。
Fred Long、Dhruv Mohindra、Robert C.Seacord、Dean F.Sutherland、David Svoboda编著的《Java编码指南(编写安全可靠程序的75条建议英文版)》是《Java安全编码标准》一书的扩展,书中把那些不必列入Java安全编码标准但是同样会导致系统不可靠或不安全的Java编码实践整理出来,并为这些糟糕的实践提供了相应的文档和警告,以及合规的解决方案。读者可以将本书作为Java安全方面的工具书,根据自己的需要,找到自己感兴趣的规则进行阅读和理解,或者在实际开发中遇到安全问题时,根据书中列出的大致分类对规则进行索引和阅读,也可以通读全书的所有规则,系统地了解Java安全规则,增强对Java安全特性、语言使用、运行环境特性的理解。
本书给出了帮助Java软件工程师设计出高质量的、安全的、可靠的、强大的、有弹性的、可用性和可维护性高的软件系统的75条编码指南,适合所有Java开发人员阅读,也适合高等院校教师和学生学习和参考。
Chapter 1 Security/安全
1. Limit the lifetime of sensitive data
限制敏感数据的生命周期
2. Do not store unencrypted sensitive information on the client side
不要在客户端存储未经加密的敏感数据
3. Provide sensitive mutable classes with unmodifiable wrappers
为敏感可变类提供不可修改的包装器
4. Ensure that security-sensitive methods are called with validated arguments
确保安全敏感方法被调用时参数经过验证
5. Prevent arbitrary file upload
防止任意文件上传
6. Properly encode or escape output
正确地编码或转义输出
7. Prevent code injection
防止代码注入
8. Prevent XPath injection
防止XPath注入
9. Prevent LDAP injection
防止LDAP注入
10. Do not use the clone() method to copy untrusted method parameters
不要使用clone()方法来复制不可信的方法参数
11. Do not use Object.equals() to compare cryptographic keys
不要使用Object.equals()来比较密钥
12. Do not use insecure or weak cryptographic algorithms
不要使用不安全的弱加密
13. Store passwords using a hash function
使用散列函数存储密码
14. Ensure that SecureRandom is properly seeded
确保SecureRandom正确地选择随机数种子
15. Do not rely on methods that can be overridden by untrusted code
不要依赖可以被不可信代码覆写的方法
16. Avoid granting excess privileges
避免授予过多特权
17. Minimize privileged code
最小化特权代码
18. Do not expose methods that use reduced-security checks to untrusted code
不要将使用降低安全性检查的方法暴露给不可信代码
19. Define custom security permissions for fine-grained security
对细粒度的安全定义自定义安全权限
20. Create a secure sandbox using a security manager
使用安全管理器创建一个安全的沙盒
21. Do not let untrusted code misuse privileges of callback methods
不要让不可信代码误用回调方法的特权
Chapter 2 Defensive Programming/防御式编程
22. Minimize the scope of variables
最小化变量的作用域
……
Chapter 3 Reliability/可靠性
Chapter 4 Program Understandability/程序的可理解性
Chapter 5 Programmer Misconceptions/程序员的常见误解
Appendix A Android
Glossary/术语表
References/参考文献