软件安全实现：安全编程技术

2010年清华大学出版社出版的图书
《软件安全实现：安全编程技术》是一本图书，由清华大学出版社出版，全书共分为16章，针对安全编程技术进行讲解，主要涵盖了基本安全编程、应用安全编程、数据保护编程以及其他内容共四大部分：第一部分包含内存安全、线程/进程安全、异常/错误处理安全、输入安全，第二部分包含国际化安全、面向对象的编程安全、Web编程安全、权限控制、远程调用和组件安全、避免拒绝服务攻击等内容，第三部分包含数据加密保护、其他保护、数字签名等内容，最后一部分包含软件安全测试和代码性能调优。每章后面都有配套练习，用于对本章进行总结演练。
内容简介
针对安全编程技术，《软件安全实现:安全编程技术》不局限于某一门特定语言，而是将编程过程中的通用安全问题进行全面总结，逐步引领读者从基础到各个知识点进行学习，以便能开发出安全可靠的系统。全书内容由浅入深，并辅以大量的实例说明，每一个章节以实际案例为起点进行讲解，通俗易懂。
全书所有实例的源代码均可在清华大学出版社的网站上下载，供读者学习参考使用。
《软件安全实现:安全编程技术》可作为有一定编程基础的程序员的学习用书，也可供有经验的开发人员深入学习使用，更可以为高等学校、培训班作为教材使用，对于缺乏安全编程实战经验的程序员而言，阅读《软件安全实现:安全编程技术》可以快速积累经验，提高编程水平。
目录
第1章 安全编程概述
1.1 软件的安全问题
1.1.1 任何软件都是不安全的
1.1.2 软件不安全性的几种表现
1.1.3 软件不安全的原因
1.2 在软件开发生命周期中考虑安全问题
1.2.1 软件设计阶段威胁建模
1.2.2 安全代码的编写
1.2.3 软件的安全性测试
1.2.4 漏洞响应和产品的维护
1.3 本书的内容
1.3.1 编程中的安全
1.3.2 针对信息安全的编程
1.3.3 其他内容
小结
练习
参考文献
第2章 内存安全
2.1缓冲区溢出
2.1.1 缓冲区
2.1.2 缓冲区溢出
2.1.2 缓冲区溢出
2.1.3 缓冲区溢出案例
2.1.4 堆溢出
2.1.5缓冲区溢出攻击
2.1.6 防范方法
2.2 整数溢出
2.2.1 整数的存储方式
2.2.2 整数溢出
2.2.3 解决方案
2.3 数组和字符串问题
2.3.1 数组下标问题
2.3.2 字符串格式化问题
小结
练习
参考文献
第3章 线程/进程安全
3.1 线程机制
3.1.1 为什么需要线程
3.1.2 线程机制和生命周期
3.2 线程同步安全
3.2.1 线程同步
3.2.2 案例分析
3.2.3 解决方案
3.3 线程协作安全
3.3.1 线程协作
3.3.2 案例分析
3.3.3 解决方案
3.4 线程死锁安全
3.4.1 线程死锁
3.4.2 案例分析
3.4.3 解决方案
3.5 线程控制安全
3.5.1 安全隐患
3.5.2 案例分析
3.5.3 解决方案
3.6 进程安全
3.6.1 进程概述
3.6.2 进程安全问题
小结
练习
参考文献
第4章 异常/错误处理中的安全
4.1 异常/错误的基本机制
4.1.1 异常的出现
4.1.2 异常的基本特点
4.2 异常捕获中的安全
4.2.1 异常的捕获
4.2.2 异常捕获中的安全
4.3 异常处理中的安全
4.3.1 finally的使用安全
4.3.2 异常处理的安全
4.4 面向过程异常处理中的安全问题
4.4.1 面向过程的异常处理
4.4.2 安全准则
小结
练习
第5章 输入安全
5.1 一般性讨论
5.1.1 输入安全概述
5.1.2 预防不正确的输入
5.2 几种典型的输入安全问题
5.2.1 数字输入安全问题
5.2.2 字符串输入安全问题
5.2.3 环境变量输入安全问题
5.2.4 文件名安全问题
5.3 数据库输入安全问题
5.3.1 数据库概述
5.3.2 数据库的恶意输入
5.3.3 账户和口令问题
小结
练习
参考文献
第6章 国际化安全
6.1 国际化的基本机制
6.1.1 国际化概述
6.1.2 国际化过程
6.2 国际化中的安全问题
6.2.1 字符集
6.2.2 字符集转换
6.2.3 I18N缓冲区溢出问题
6.3 推荐使用Unicode
小结
练习
参考文献
第7章 面向对象中的编程安全
7.1 面向对象概述
7.1.1 面向对象基本原理
7.1.2 面向对象的基本概念
7.2 对象内存分配与释放
7.2.1 对象分配内存
7.2.2 对象内存释放
7.2.3 对象线程安全
7.2.4 对象序列化安全
7.3 静态成员安全
7.3.1 静态成员的机理
7.3.2 静态成员需要考虑的安全问题
7.3.3 利用单例提高程序性能
小结
练习
第8章 Web编程安全
8.1 Web概述
8.1.1 Web运行的原理
8.1.2 Web编程
8.2 避免URL操作攻击
8.2.1 URL的概念及其工作原理
8.2.2 URL操作攻击
8.2.3 解决方法
8.3 页面状态值安全
8.3.1 URL传值
8.3.2 表单传值
8.3.3 Cookie方法
8.3.4 session方法
8.4 Web跨站脚本攻击
8.4.1 跨站脚本攻击的原理
8.4.2 跨站脚本攻击的危害
8.4.3 防范方法
8.5 SQL注入
8.5.1 SQL注入的原理
8.5.2SQL注入攻击的危害
8.5.3 防范方法
8.6 避免Web认证攻击
8.6.1 Web认证攻击概述
8.6.2 Web认证攻击防范
小结
练习
第9章 权限控制
9.1 权限控制概述
9.1.1 权限控制分类
9.1.2 用户认证方法
9.2 权限控制的开发
9.2.1 开发思想
9.2.2 基于代理模式的权限控制开发
9.2.3 基于AOP的权限控制开发
9.3 单点登录
9.3.1 单点登录概述
9.3.2 单点登录中账号管理
9.3.3 单点登录实现
9.4 权限控制的管理
小结
练习
第10章 远程调用和组件安全
10.1 远程调用安全
10.1.1 远程调用概述
10.1.2 安全问题
10.2 ActiveX安全
10.2.1 ActiveX概述
10.2.2 安全问题
10.3 JavaApplet安全
10.3.1 JavaApplet概述
10.3.2 安全问题
10.4 DCOM安全
10.4.1 DCOM概述
10.4.2 安全问题
10.5 EJB安全
10.5.1 EJB概述
10.5.2 开发安全的EJB
10.6 CORBA安全
10.6.1 CORBA概述
10.6.2 CORBA安全概述
小结
练习
参考文献
第11章 避免拒绝服务攻击
11.1 拒绝服务攻击
11.2 几个拒绝服务攻击的案例
11.2.1 程序崩溃攻击
11.2.2 资源不足攻击
11.2.3 恶意访问攻击
小结
练习
参考文献
第12章 数据的加密保护
12.1 加密概述
12.1.1 加密的应用
12.1.2 常见的加密算法
12.2 实现对称加密
12.2.1 用Java实现DES
12.2.2 用Java实现3DES
12.2.3 用Java实现AES
12.3 实现非对称加密
12.3.1 用Java实现RSA
12.3.2DSA算法
12.4 实现单向加密
12.4.1 用Java实现MD5
12.4.2 用Java实现SHA
12.4.3 用Java实现消息验证码
12.5 密钥安全
12.5.1 随机数安全
12.5.2 密钥管理安全
小结
练习
参考文献
第13章 数据的其他保护
13.1 数据加密的限制
13.2 密码保护与验证
13.3 内存数据的保护
13.3.1 避免将数据写入硬盘文件
13.3.2 从内存擦除数据
13.4 注册表安全
13.4.1 注册表简介
13.4.2 注册表安全
13.5 数字水印
13.5.1 数字水印简介
13.5.2 数字水印的实现
13.6 软件版权保护
小结
练习
第14章 数字签名
14.1 数字签名概述
14.1.1 数字签名的应用
14.1.2 数字签名的过程
14.2 实现数字签名
14.2.1 用RSA实现数字签名
14.2.2 用DSA实现数字签名
14.3 利用数字签名解决实际问题
14.3.1 解决篡改问题
14.3.2 解决抵赖问题
小结
练习
第15章 软件安全测试
15.1 软件测试概述
15.1.1 软件测试的概念
15.1.2 软件测试的目的和意义
15.1.3 软件测试方法
15.2 针对软件安全问题的测试
15.2.1 软件安全测试的必要性
15.2.2 软件安全测试的过程
15.3 安全审查
15.3.1 代码的安全审查
15.3.2 配置复查
15.3.3 文档的安全审查
小结
练习
参考文献
第16章 程序性能调优
16.1 数据优化
16.1.1 优化变量赋值
16.1.2 优化字符串
16.1.3 选择合适的数据结构
16.1.4 使用尽量小的数据类型
16.1.5 合理使用集合
16.2 算法优化
16.2.1 优化基本运算
16.2.2 优化流程
16.3 应用优化
16.3.1 优化异常处理
16.3.2 单例
16.3.3 享元
16.3.4 延迟加载
16.3.5 线程同步中的优化
16.4 数据库的优化
16.4.1 设计上的优化
16.4.2 SQL语句优化
16.4.3 其他优化
小结
练习