第1章 管理用户 1
1.1 引言 2
1.1.1 理解威胁 2
1.2 建立用户证书 3
1.2.1 实施强密码 3
1.2.2 避免使用易于猜测的证书 9
1.2.3 防止证书获取 11
1.2.4 限制空闲的账户 14
1.3.1 存储密码 16
1.3 管理密码 16
1.3.2 密码时效和历史记录 19
1.3.3 改变密码 21
1.4 重新设置丢失或被遗忘的密码 23
1.4.1 重新设置密码 23
1.4.2 通过电子邮件发送信息 28
1.4.3 分配临时密码 30
1.4.4 使用秘密问题 31
1.5 授权用户 34
1.5.1 教育用户 35
1.5.2 让用户置身其中 36
1.6.1 建立用户证书 37
1.6 编码标准快速参考 37
1.6.2 管理密码 38
1.6.3 重新设置丢失或被遗忘的密码 38
1.6.4 授权用户 39
1.7 代码审查快速参考 39
1.7.1 建立用户证书 39
1.7.2 管理密码 40
1.7.3 重新设置丢失或被遗忘的密码 40
1.7.4 授权用户 41
1.8 常见问题 41
第2章 验证和授权用户 45
2.1 引言 46
2.1.1 理解威胁 46
2.2 验证用户 47
2.2.1 构建登录表单 47
2.2.2 使用表单验证 49
2.2.3 使用Windows验证 56
2.2.4 使用Passport验证 64
2.2.5 阻塞暴力攻击 67
2.3 授权用户 74
2.3.1 决定如何授权 74
2.3.2 使用文件授权 76
2.3.3 应用URL授权 78
2.3.4 通过代码授权用户 84
2.4 编码标准快速参考 86
2.4.1 验证用户 86
2.4.2 授权用户 87
2.5 代码审查快速参考 88
2.5.1 验证用户 88
2.5.2 授权用户 89
2.6 常见问题 90
第3章 管理会话 91
3.1.1 会话标记 92
3.1 引言 92
3.1.2 验证标记 93
3.1.3 理解威胁 93
3.2 维持状态 94
3.2.1 设计安全标记 95
3.2.2 选择标记机制 98
3.2.3 使用状态提供器 100
3.3 使用ASP.NET标记 104
3.3.1 使用cookie 104
3.3.2 使用视图状态 110
3.4.1 创建标记 114
3.4 增强ASP.NET状态管理 114
3.4.2 终止会话 120
3.5 编码标准快速参考 123
3.5.1 维持状态 123
3.5.2 使用ASP.NET标记 123
3.5.3 增强ASP.NET状态管理 124
3.6 代码审查快速参考 124
3.6.1 维持状态 124
3.6.2 使用ASP.NET标记 125
3.6.3 增强ASP.NET状态管理 126
3.7 常见问题 126
第4章 加密私有数据 129
4.1 引言 130
4.2 使用ASP.NET中的加密技术 131
4.2.1 使用对称加密技术 132
4.2.2 使用非对称加密技术 151
4.2.3 使用哈希算法 152
4.3 利用.NET加密特性 159
4.3.1 创建随机数 160
4.3.2 保持内存清洁 160
4.3.3 保护机密内容 163
4.4 使用SSL保护通信 167
4.5.2 利用.NET加密特性 170
4.5 编码标准快速参考 170
4.5.1 在ASP.NET中使用加密技术 170
4.6 代码审查快速参考 171
4.6.1 在ASP.NET中使用加密技术 171
4.6.2 利用.NET加密特性 172
4.7 常见问题 172
第5章 过滤用户输入 175
5.1 引言 176
5.2 恶意输入处理 177
5.2.1 识别输入源 177
5.2.2 防御性编程 180
5.3 输入约束 186
5.3.1 边界检查 187
5.3.2 模式匹配 189
5.3.3 数据映射 193
5.3.4 数据编码 196
5.3.5 封装 199
5.3.6 参数化 200
5.3.7 双重解码 201
5.3.8 语法检查 203
5.3.9 异常处理 203
5.3.10 Honey Drop 204
5.4 限制恶意输入下的暴露 206
5.4.1 减少攻击面 206
5.4.2 限制攻击范围 209
5.4.3 坚固服务器应用程序 210
5.5 编码标准快速参考 211
5.5.1 处理恶意输入 211
5.5.2 约束输入 212
5.5.3 限制恶意输入下的暴露 213
5.6.2 约束输入 214
5.6.1 处理恶意输入 214
5.6 代码审查快速参考 214
5.6.3 限制恶意输入下的暴露 216
5.7 常见问题 216
第6章 访问数据 219
6.1 引言 220
6.2 保护数据库 220
6.2.1 保护数据库位置 220
6.2.2 限制攻击面 222
6.2.3 保证最小特权 226
6.2.4 保护数据库 228
6.3.1 连接数据源 229
6.3 编写安全的数据访问代码 229
6.3.2 阻止SQL注入 233
6.3.3 编写安全SQL代码 243
6.3.4 读写数据文件 247
6.4 编码标准快速参考 251
6.4.1 保护数据库驱动程序 251
6.4.2 保护数据库 251
6.4.3 编写安全的数据访问代码 252
6.5.1 保护数据库驱动程序 253
6.5.2 保护数据库 253
6.5 代码审查快速参考 253
6.5.3 编写安全的数据访问代码 254
6.6 常见问题 255
第7章 开发安全的ASP.NET应用程序 257
7.1 引言 258
7.1.1 理解威胁 258
7.2 编写安全的HTML 258
7.2.1 构造安全的HTML 259
7.2.2 阻止信息泄漏 261
7.3 处理异常 262
7.3.1 使用结构化错误处理 264
7.3.2 报告和记录错误 267
7.4.1 编写安全的HTML 270
7.4 编码标准快速参考 270
7.4.2 处理异常 271
7.5 代码审查快速参考 271
7.5.1 编写安全的HTML 271
7.5.2 处理异常 272
7.6 常见问题 272
第8章 保护XML 275
8.2 应用XML加密 276
8.2.1 加密XML数据 276
8.1 引言 276
8.3 应用XML数字签名 291
8.3.1 XML数据签名 291
8.4 编码标准快速参考 300
8.4.1 应用XML加密 300
8.4.2 应用XML数字签名 300
8.5 代码审查快速参考 300
8.5.1 应用XML加密 300
8.5.2 应用XML数字签名 301
8.6 常见问题 301
附录A 理解.NET安全 303
附录B Web应用程序安全威胁术语表 353