第1章 应用程序安全性
1.1 安全性前景
1.2 担心安全性的原因
1.3 什么是安全性
1.3.1 恶意企图
1.3.2 信任、安全和意图
1.3.3 危害
1.4 攻击者的攻击方式
1.4.1 弱点和利用
1.4.2 组合式攻击:ILOVEYOU
1.5 如何应付这些攻击
1.5.1 任务:中等难度的和不可能的
1.5.2 围高栅栏
1.5.3 您不必是个密码专家
1.5.4 展望未来
1.6 小结
第2章 .NET和安全性概述
2.1 角色安全和代码安全
2.1.1 Windows NT的安全性
2.1.2 Internet Explorer的安全性
2.2 .NET的安全概念
2.2.1 托管代码
2.2.2 .NET Framework的安全命名空间
2.3 策略和权限命名空间
2.3.1 代码安全
2.3.2 证据集合
2.3.3 策略和权限
2.3.4 快速回顾
2.4 实际应用中的.NET代码安全
2.4.1 安全破坏的第一次尝试
2.4.2 堆栈遍历
2.4.3 使用“请求”强迫执行堆栈遍历
2.4.4 使用Deny和PermitOnly限制权限
2.4.5 使用断言覆盖堆栈遍历
2.4.6 声明性的安全
2.4.7 缩减授权集
2.5 小结
第3章 .NET的高级安全
3.1 链接请求
3.1.1 即时编译
3.1.2 在“链接时”发出请求
3.1.3 创建链接请求
3.1.4 什么时候使用链接请求
3.1.5 调用具有链接请求的方法
3.1.6 链接请求和APTCA
3.1.7 取消非托管的代码请求
3.1.8 链接请求小结
3.2 继承请求
3.3 安全和反射
3.3.1 反射和链接请求
3.3.2 反射和断言
3.3.3 Reflection和Deny/PermitOnly
3.4 .NET中基于角色的安全
3.4.1 身份对象
3.4.2 负责人对象
3.5 小结
第4章 可定制的安全应用程序
4.1 什么是安全挑战
4.2 如果违规就要处理
4.2.1 尝试一:询问客户
4.2.2 尝试二:使用PermitOnly
4.2.3 尝试三:向下锁定目录
4.2.4 尝试四:假定它来自Internet
4.2.5 尝试五:定制策略
4.3 小结
第5章 非安全代码
5.1 非安全的面向对象代码
5.2 较差的链接请求
5.3 非安全的异常处理代码
5.3.1 最坏的编程习惯:泄漏特权信息
5.3.2 最坏的编程习惯:不能进入非安全模式
5.3.3 最坏的编程习惯:在没有处理异常的前提下改变状态
5.3.4 异常处理综述
5.4 泄露秘密信息
5.4.1 最坏的编程习惯:不能请求缓存数据
5.4.2 最坏的编程习惯:编写自己的加密方法
5.4.3 最坏的编程习惯:试图对用户保密
5.5 不安全的服务器端代码
5.5.1 拒绝服务攻击
5.5.2 最坏的编程习惯:相信客户机
5.6 其他问题
5.6.1 线程问题
5.6.2 差的串行化代码
5.6.3 差的事件处理程序和其他委托
5.6.4 安全使用反射
5.7 小结
第6章 如何编写安全的代码
6.1 安全的代码就是可靠的代码
6.1.1 正确性
6.1.2 可测试性
6.1.3 服务器的性能
6.1.4 可维护性
6.2 好的程序集
6.2.1 强名
6.2.2 程序集安全特性
6.2.3 程序集安全性总结
6.3 编写安全的代码
6.4 一览表
6.5 再好的软件也不是绝对安全的
6.5.1 物理安全
6.5.2 过度信任
6.6 小结
第7章 发现安全故障
7.1 各种安全缺陷
7.1.1 发现安全缺陷#1:调用非托管代码
7.1.2 发现安全缺陷#2:玩游戏
7.1.3 发现安全缺陷#3:服务器代码
7.2 发现代码中的安全缺陷
附录A 简述公钥加密
A.1 对称加密系统
A.2 非对称加密系统
A.2.1 考虑性能
A.2.2 结合使用对称和非对称加密系统
A.2.3 公钥加密和强名
A.2.4 安全发送不重要
附录B 使用ILDASM查看IL
附录C 客户支持、勘误表和代码下载
C.1 如何下载本书的示例代码
C.2 勘误表
C.3 E-mail支持
C.4 p2p.wrox.corn