随着Java应用程序的广泛应用,Java安全问题日益错综复杂。本书作者通过来自现实世界的攻击案例,暴露黑客攻击Java应用程序的方法和手段,提出防御措施与方案,使您未雨绸缪,先人一步。
本书首先从Java及J2EE体系结构和基本安全机制人手,阐述Java认证和授权服务(JAAS)、Java密码系统扩展(JCE)和Java安全套接字扩展(JSSE)等安全包,书中引用一个完整清晰的示例项目,通过研究它的不同版本,包括独立应用版本、二层应用版本、基于Web的版本和基于EJB的版本,展示Java及J2EE应用在不同环境下可能遭遇的各种安全问题,并及时提出应对策略。
本书是开发Java安全应用的宝典,关注的是与应用开发者息息相关的问题。本书面向熟悉Java语言的应用开发人员,对于网络管理员和想了解如何保持J2EE和Java Web应用安全的专业人员也不失为一本难觅的参考书。
第1部分 J2EE体系结构和技术简介
第1章 Java基础:安全性起步
1.1 Java的过去和现在
1.2 Java的语言体系结构
1.3 Java的安全体系结构
1.4 Java的安全策略
1.5 Java的principal和subject
1.6 小结
第2章 JAAS、JCE和JSSE简介
2.1 Java的认证和授权服务(JAAS)
2.2 Java加密
2.3 Java安全套接字扩展(JSSE)
2.4 保护JAR文件
2.5 小结
第3章 J2EE的体系结构与安全
3.1 中间件和分布式软件组件
3.2 Web层组件: servlet和JSP
3.3 业务层组件: EJB
3.4 其他的J2EE API
3.5 EJB安全体系结构
3.6 表现层的安全
3.7 业务层的安全
3.8 小结
第2部分 Java应用和网络安全
第4章 使用加密和认证保护应用程序
4.1 应用程序的安全性: 过程
4.2 本地存储数据的危险性
4.3 小结
第5章 软件盗版和代码授权方案
5.1 代码滥用的危险
5.2 小结
第6章 字节码的暴露
6.1 逆向工程的危险性
6.2 嵌入串的危险性
6.3 小结
第7章 攻击Java客户/服务器应用: 另一个可攻击的层
7.1 客户/服务器实现
7.2 客户/服务器结构面临的威胁
7.3 小结
第8章 Java网络应用: 对安全缺陷的潜在攻击
8.1 RMI的危险
8.2 远程加载类和JAR文件的危险
8.3 小结
第3部分 Web层和业务层的J2EE的安全性
第9章 开发Java Web层组件
9.1 示例应用: 启用Web
9.2 小结
第10章 动摇其基础: Web容器的优缺点
第11章 Java Web服务的安全机制
11.1 Java中的Web服务
11.2 使用Web服务的应用程序实现
11.3 Web服务应用的弱点
11.4 Web服务的工作流安全性
11.5 Web服务安全的未来
11.6 小结
第12章 EJB: 业务层的安全
12.1 EJB应用实现
12.2 EJB应用的弱点
12.3 使用消息驱动的bean时常见的缺陷
12.4 小结
谁应当阅读这本书
本书是面向熟悉Java语言及其主要概念(比如对象设计、类的继承和接口的使用等)的Java开发人员。本书也可作为网络管理员和想了解如何保持J2EE和Java Web应用安全的安全专家的参考书。
本书并不要求读者对密码学和神秘的密码数学有深刻理解。实际上,加密只是J2EE安全的一部分。流行的Java密码系统扩展(JCE)和Java安全套接字扩展(JSSE)已经使这些加密机械成为相对透明的简单处理。
对J2EE的深入理解也不是必需的。这本书并没有详细解释J2EE,它只给出了对servlet和EJB基本原理的解释。经验丰富的Java程序员能够理解和掌握这些例子。
本书的特点
本书蕴含的哲学与市场上很多关于Java安全的书有着根本的不同。下面是本书的独特之处:
关注整体应用,而不只是一个操作系统或一项技术。不是关注一项技术,比如EJB,而是关注应用安全,从客户/服务器到基于Web,从独立应用到Web服务,从独立应用到Web服务,从Java Web Start客户端到中间件的EJB,本书包含了广泛的J2SE和J2EE应用体系结构。我们希望这将有助于读者建立起一个综合的、集成的、可跨越体系结构和平台的应用安全策略。
为应用开发者和系统设计者提供一个工具箱。本书关注在Java/J2EE应用程序的上下文(context)中对安全技术的使用。不是向你展现相关的代码片段,而是邀请你访问我们的网站(www.hackingexposedjava.com),从这个网站可以下载实际可用的应用示例,但要使用安装指令完成安装,它们包含了本书概述的各种技术。在很多情况下,本书使用了多种技术来实现相同的安全目标。
关注与应用开发者息息相关的问题,而不是针对安全理论家。我们没有重写API规范和文档,没有讨论各种加密的细微差别,因为我们认为通过阅读随系统发布的文档,你自己可以发现这些信息。相反,我们给出了当你试图在一个实际应用中使用这些特性时,将遇到的问题和挑战。
能够良好实现的安全机制优于完美但未能实现的安全机制。能够在实际中使用的安全性是最好的安全性。因而,我们介绍可被有经验的开发者容易实现的机制,而不是“接近完美”的过于复杂的机制。尽管设计了一个目前非常完善的应用安全系统,但如果因为项目管理者没有时间实现而将它砍掉(我们不止一次看到这种情况),这等于白忙一场。
本书的结构
本书的划分如下所示:
第1章回顾了总的Java体系结构和基本的安全机制。
第2章的重点是J2SE 1.4中几个重要的新的安全包:Java认证和授权服务(JAAS)、Java密码系统扩展(JCE)和Java安全套接字扩展(JSSE)。
第3章集中讨论J2EE体系结构和安全机制。
第4章到第6章使用案例研究的独立应用版本,研究与任何Java应用相关的基本应用的安全性问题。
第7章和第8章使用案例研究的二层应用版本,探索了开发一个需要使用JDBC连接一个数据库或者使用RMI连接一个对象服务器的系统时通常面对的问题。
第9章和第10章使用基于Web版本的案例研究,关注部署使用servlet和JSP技术的应用程序时通常遇到的安全性问题。
第11章、12章使用Web服务和基于EJB版本的案例研究,描述了应用程序中间件的安全防卫问题。
最后的话
我们花费大量的时间详述技术、建立范例并编译引用,以使本书的包容性更强。我们包含的所有技术仅仅是技术,要靠你的智慧、经验和领域知识,来确定它们对你的环境是否合适。本质上,我们只是给了你带有安装说明的几百把锁,你需要首先确定要锁哪个门(我们从没有到过你的住宅),并确定哪个门使用哪把锁。例如,如果你的前门是敞开的(很危险),你可能不想花费所有的时间来锁住你的衣橱,或者你可能不想在一个门上锁上所有的锁。很少有应用程序会使用本书描绘的所有技术。我们只是想告诉你可能会发生什么,而怎么做就由你来决定了。
我们的示例代码以尽可能直观快捷的方式展示相关的安全技术。我们将它作为正文的辅助内容,以补充本书的内容。它将作为一个学习工具,而不是产品源代码。在一个产品环境中,在你执行任何与安全相关的代码之前,要确保你理解了它的全部细节和可能产生的副作用。这里提供的代码也不例外。
最终,你的应用程序的安全性要依靠你自己的双手。我们将给你工具和信息来帮助你做出决策,但最终的安全决策要靠你自己。最好的安全方法足综合的和——致的。将应用程序的安全性与现有的操作系统和网络安全集成,并将安全原则—致地贯穿于你的应用程序。不管怎样,当遇到失败时,要依靠个人的判断、智慧和勤奋作为指导。在应用级,可以通过细致的分析,而不是依靠自动工具来发现缺陷,预防攻击。正如本书的—位作者常说的:“一个敏锐的头脑比一把锋利的剑有用……但两者都具有才最好!”
我们将帮助你磨砺你的头脑和“安全之剑”,但是你自己要见多识广,并留心相关的安全主题、漏洞和补丁。责任全在你自己。