第1章 安全简介 1
1.1 相关背景 1
1.2 安全基础 2
1.2.1 身份验证 2
1.2.2 授权 2
1.2.3 安全通信 2
1.3 各种开发技术 3
1.4 设计原则 4
1.5 本章小结 5
第2章 ASP.NET应用程序的安全模型 6
2.1 .NET Web应用程序 6
2.1.1 逻辑层 6
2.1.2 物理部署模型 7
2.2 实现技术 8
2.3 安全体系结构 9
2.3.1 跨层安全性 10
2.3.2 身份验证 11
2.3.3 授权 13
2.3.4 关守和关口 15
2.4 .NET框架安全机制 17
2.4.1 代码访问安全性 17
2.4.2 主体和标识 18
2.4.3 WindowsPrincipal和WindowsIdentity 20
2.4.4 GenericPrincipal和相关的标识对象 20
2.4.5 ASP.NET和HttpContext.User 21
2.4.6 远程处理和Web服务 21
2.5 本章小结 22
第3章 身份验证和授权 23
3.1 设计身份验证和授权策略 24
3.1.1 确定资源 24
3.1.2 选择授权策略 24
3.1.3 选择用于资源访问的标识 25
3.1.4 考虑标识的流动 26
3.1.5 选择身份验证方式 26
3.1.6 确定如何流动标识 26
3.2 授权方式 27
3.2.1 基于角色的授权 27
3.2.2 基于资源的授权 28
3.2.3 资源访问模型 28
3.2.4 受信任子系统模型 28
3.2.5 模拟/委托模型 30
3.2.6 选择资源访问模型 31
3.3 流动标识 32
3.3.1 应用程序级的标识流动和操作系统级的标识流动 33
3.3.2 模拟和委托 33
3.4 基于角色的授权 35
3.4.1 .NET角色 35
3.4.2 Enterprise Services(COM+)角色 36
3.4.3 SQL Server用户定义的数据库角色 36
3.4.4 SQL Server应用程序角色 36
3.4.5 .NET角色和Enterprise Services(COM+)角色 37
3.4.6 使用.NET角色 38
3.5 选择身份验证机制 41
3.5.1 Internet方案 42
3.5.2 Intranet/Extranet方案 43
3.5.3 各种身份验证机制的比较 44
3.6 本章小结 45
第4章 安全通信 46
4.1 了解需要保护的内容 46
4.2 SSL/TLS 47
4.3 IPSec 48
4.4 RPC加密 49
4.5 点对点安全 50
4.5.1 浏览器到Web服务器的通信 50
4.5.2 Web服务器到远程应用程序服务器的通信 50
4.5.3 应用程序服务器到数据库服务器的通信 51
4.5.4 对SQL Server使用SSL 51
4.6 在IPSec和SSL之间进行选择 52
4.7 Farming和负载平衡 52
4.8 本章小结 52
第5章 Intranet安全机制 54
5.1 ASP.NET到SQL Server 55
5.1.1 特性 55
5.1.2 提供安全保护 55
5.1.3 结果 56
5.1.4 安全配置步骤 57
5.1.5 分析 59
5.1.6 问题和解答 60
5.1.7 相关方案 60
5.2 ASP.NET到Enterprise Services到SQL Server 62
5.2.1 特性 62
5.2.2 提供安全保护 62
5.2.3 结果 63
5.2.4 安全配置步骤 64
5.2.5 分析 66
5.2.6 缺陷 66
5.3 ASP.NET到Web服务到SQL Server 67
5.3.1 特性 67
5.3.2 提供安全保护 68
5.3.3 结果 68
5.3.4 安全配置步骤 69
5.3.5 分析 71
5.3.6 缺陷 73
5.3.7 问题和解答 73
5.3.8 相关方案 73
5.4 ASP.NET到远程处理到SQL Server 73
5.4.1 特性 74
5.4.2 提供安全保护 74
5.4.3 结果 75
5.4.4 安全配置步骤 75
5.4.5 分析 78
5.4.6 缺陷 79
5.5 使原始调用者流动到数据库 79
5.5.1 ASP.NET到SQL Server 80
5.5.2 ASP.NET到Enterprise Services到SQL Server 81
5.5.3 特性 81
5.5.4 提供安全保护 82
5.5.5 结果 82
5.5.6 安全配置步骤 83
5.5.7 分析 86
5.5.8 缺陷 87
5.6 本章小结 87
第6章 Extranet安全机制 88
6.1 公开Web服务 88
6.1.1 特性 89
6.1.2 提供安全保护 89
6.1.3 结果 90
6.1.4 安全配置步骤 91
6.1.5 分析 93
6.1.6 缺陷 94
6.1.7 问题和解答 94
6.2 公开Web应用程序 96
6.2.1 方案特性 96
6.2.2 提供安全保护 97
6.2.3 结果 97
6.2.4 分析 100
6.2.5 缺陷 101
6.3 本章小结 102
第7章 Internet安全机制 102
7.1 ASP.NET到SQL Server 103
7.1.1 特性 103
7.1.2 提供安全保护 103
7.1.3 结果 104
7.1.4 安全配置步骤 104
7.1.5 分析 106
7.1.6 缺陷 108
7.1.7 相关方案 108
7.2 ASP.NET到远程Enterprise Services到SQL Server 109
7.2.1 特性 109
7.2.2 提供安全保护 110
7.2.3 结果 111
7.2.4 安全配置步骤 111
7.2.5 分析 114
7.2.6 缺陷 115
7.2.7 相关方案 115
7.3 本章小结 116
第8章 ASP.NET安全机制 117
8.1 ASP.NET安全体系结构 117
8.2 身份验证和授权策略 121
8.2.1 可用的授权选项 121
8.2.2 使用模拟功能的Windows身份验证 122
8.2.3 不使用模拟功能的Windows身份验证 124
8.2.4 使用固定标识的Windows身份验证 125
8.2.5 窗体身份验证 126
8.2.6 护照身份验证 127
8.3 配置安全性 128
8.3.1 配置IIS安全性 129
8.3.2 配置ASP.NET安全性 129
8.3.3 保护资源安全 132
8.3.4 保护通信安全 134
8.4 通过编程实现安全性 134
8.4.1 一种授权模式 134
8.4.2 创建自定义IPrincipal类 136
8.5 Windows身份验证 137
8.6 窗体身份验证 138
8.6.1 窗体身份验证的开发步骤 139
8.6.2 窗体实现指南 143
8.6.3 装载多个使用窗体身份验证的应用程序 144
8.6.4 无cookie的窗体身份验证 144
8.7 护照身份验证 144
8.7.1 将ASP.NET配置为使用护照身份验证 144
8.7.2 将护照标识映射为Global.asax中的角色 145
8.7.3 测试角色成员关系 145
8.8 自定义身份验证 145
8.9 ASP.NET的进程标识 146
8.9.1 使用具有最低权限的账户 146
8.9.2 避免使用SYSTEM账户 146
8.9.3 使用默认的ASPNET账户 147
8.10 模拟 149
8.10.1 模拟功能和本地资源 149
8.10.2 模拟功能和远程资源 149
8.10.3 模拟和线程 149
8.11 访问系统资源 149
8.11.1 访问事件日志 150
8.11.2 访问注册表 150
8.12 访问COM对象 151
8.13 访问网络资源 152
8.13.1 使用ASP.NET进程标识 153
8.13.2 使用服务组件 153
8.13.3 使用匿名Internet用户账户 154
8.13.4 使用LogonUser并模拟特定的Windows标识 156
8.13.5 使用原始调用者 156
8.13.6 访问UNC文件共享上的文件 157
8.13.7 访问非Windows网络资源 157
8.14 安全通信 158
8.15 存储机密信息 158
8.15.1 在ASP.NET中存储机密信息的选项 159
8.15.2 在单独的逻辑卷上的文件中存储机密信息 159
8.16 保护会话状态和视图状态 160
8.16.1 保护视图状态 160
8.16.2 保护Cookie 160
8.16.3 保护SQL会话状态 161
8.17 Web场 162
8.17.1 会话状态 162
8.17.2 DPAPI 163
8.17.3 在Web场中使用窗体身份验证 163
8.17.4 <machineKey>元素 163
8.18 本章小结 165
第9章 Enterprise Services安全机制 166
9.1 安全体系结构 166
9.1.1 关守和关口 167
9.1.2 使用服务器应用程序获得改进的安全性 168
9.1.3 服务器应用程序和库应用程序的安全性 169
9.1.4 代码访问安全性的要求 169
9.2 配置安全性 170
9.2.1 配置服务器应用程序 170
9.2.2 配置ASP.NET客户端应用程序 177
9.2.3 对Enterprise Services应用程序配置模拟级别 177
9.3 通过编程实现安全性 178
9.3.1 编程方式的基于角色安全性 178
9.3.2 标识调用者 179
9.4 选择一个进程标识 179
9.4.1 避免以交互用户的身份运行服务器应用程序 179
9.4.2 使用具有最低权限的自定义账户 180
9.5 访问网络资源 180
9.5.1 使用原始调用者 180
9.5.2 使用当前的进程标识 181
9.5.3 使用特定的服务账户 181
9.6 流动原始调用者 182
9.7 RPC加密 183
9.8 创建服务组件 184
9.8.1 DLL锁定问题 184
9.8.2 版本控制 184
9.8.3 QueryInterface异常 185
9.9 DCOM和防火墙 185
9.10 从ASP.NET调用服务组件 185
9.10.1 调用者的标识 186
9.10.2 使用Windows身份验证和模拟功能 186
9.10.3 在Machine.config中配置身份验证和模拟特性 186
9.10.4 配置接口代理 186
9.11 安全概念 188
9.11.1 Enterprise Services(COM+)角色和.NET角色 189
9.11.2 身份验证 190
9.11.3 模拟 192
9.12 本章小结 193
第10章 Web服务安全机制 195
10.1 Web服务安全模型 195
10.1.1 平台/传输级(点对点)安全 195
10.1.2 应用程序级安全 196
10.1.3 消息级(端对端)安全 197
10.2 平台/传输级安全体系结构 198
10.3 身份验证和授权策略 200
10.3.1 使用模拟功能的Windows身份验证 200
10.3.2 不使用模拟功能的Windows身份验证 202
10.3.3 使用固定标识的Windows身份验证 203
10.4 配置安全性 204
10.4.1 配置IIS 204
10.4.2 配置ASP.NET 205
10.4.3 保护资源的安全 205
10.4.4 禁用HTTP-GET和HTTP-POST 205
10.4.5 安全通信 206
10.5 将用于身份验证的凭据传递给Web服务 206
10.5.1 指定用于Windows身份验证的客户端凭据 207
10.5.2 从非Windows客户端调用Web服务 209
10.5.3 代理服务器身份验证 209
10.6 流动原始调用者 209
10.6.1 Kerberos委托的默认凭据 210
10.6.2 基本或窗体身份验证的显式凭据信息 212
10.7 受信任的子系统 215
10.7.1 流动调用者的标识 215
10.7.2 配置步骤 216
10.8 访问系统资源 217
10.9 访问网络资源 217
10.10 访问COM对象 217
10.11 为Web服务使用客户端证书 218
10.11.1 利用证书对Web浏览器客户端进行身份验证 218
10.11.2 使用受信任子系统模型 218
10.12 安全通信 221
10.12.1 传输级选项 221
10.12.2 消息级选项 221
10.13 本章小结 222
第11章 .NET远程处理安全机制 223
11.1 .NET远程处理体系结构 223
11.1.1 远程处理接收器 224
11.1.2 ASP.NET为宿主时的请求剖析 225
11.1.3 ASP.NET和HTTP信道 226
11.2 .NET远程处理关守 227
11.3 身份验证 228
11.3.1 装载于ASP.NET 228
11.3.2 装载于Windows服务 228
11.4 授权 229
11.5 身份验证和授权策略 230
11.6 访问系统资源 231
11.7 访问网络资源 231
11.8 将用于身份验证的凭据传递给远程对象 232
11.9 流动原始调用者 234
11.9.1 Kerberos委托的默认凭据信息 235
11.9.2 基本或窗体身份验证的显式凭据 237
11.10 受信任的子系统 240
11.10.1 流动凋用者的标识 241
11.10.2 选择宿主 241
11.10.3 配置步骤 241
11.11 安全通信 243
11.11.1 平台级选项 243
11.11.2 消息级选项 243
11.12 选择宿主进程 244
11.12.1 建议 244
11.12.2 装载于ASP.NET 244
11.12.3 装载于Windows服务 245
11.12.4 装载于控制台应用程序 246
11.13 远程处理与Web服务的比较 246
11.14 本章小结 248
第12章 数据访问安全性 249
12.1 数据访问安全简介 249
12.1.1 SQL Server关守 250
12.1.2 受信任子系统和模拟/委托模型的比较 251
12.2 身份验证 252
12.2.1 Windows身份验证 252
12.2.2 SQL身份验证 257
12.3 授权 259
12.4 安全通信 261
12.4.1 安全选项 261
12.4.2 选择选项 261
12.5 使用最低权限的连接 262
12.5.1 数据库信任应用程序 262
12.5.2 数据库信任不同的角色 262
12.5.3 数据库信任原始调用者 263
12.6 创建最低权限的数据库账户 263
12.7 安全地存储数据库连接字符串 264
12.7.1 选项 264
12.7.2 使用DPAPI 265
12.7.3 使用Web.config和Machine.config 268
12.7.4 使用UDL文件 268
12.7.5 使用自定义文本文件 269
12.7.6 使用注册表 270
12.7.7 使用COM+目录 270
12.8 根据数据库对用户进行身份验证 271
12.8.1 保存单向密码哈希值(带有salt值) 271
12.8.2 创建salt值 271
12.8.3 创建哈希值(带有Salt) 271
12.9 SQL注入攻击 272
12.9.1 问题 272
12.9.2 SQL脚本注入攻击 273
12.9.3 保护模式匹配语句 275
12.10 审核 275
12.11 用于SQL Server的进程标识 277
12.12 本章小结 277
第13章 安全问题疑难解答 279
13.1 疑难解答过程 279
13.2 身份验证问题疑难解答 280
13.2.1 IIS身份验证问题 281
13.2.2 使用Windows身份验证 281
13.2.3 使用窗体身份验证 282
13.2.4 Kerberos疑难解答 282
13.3 授权问题疑难解答 282
13.3.1 检查Windows ACL 282
13.3.2 检查标识 283
13.3.3 检查<authorization>元素 283
13.4 ASP.NET 283
13.4.1 启用跟踪功能 283
13.4.2 配置设置 284
13.5 确定标识 284
13.5.1 确定Web页中的标识 284
13.5.2 确定Web服务中的标识 287
13.5.3 确定Visual Basic 6 COM对象中的标识 287
13.6 .NET远程处理 288
13.7 SSL 288
13.8 审核和记录 289
13.8.1 Windows安全日志 289
13.8.2 SQL Server审核 289
13.8.3 IIS记录 290
13.9 疑难解答工具 291
13.9.1 File Monitor(FileMon.exe) 291
13.9.2 Fusion Log Viewer(Fuslogvw.exe) 291
13.9.3 ISQL.exe 292
13.9.4 Windows Task Manager 292
13.9.5 Network Monitor(NetMon.exe) 293
13.9.6 Registry Monitor(regmon.exe) 293
13.9.7 WFetch.exe 293
13.9.8 Visual Studio.NET工具 293
13.9.9 WebServiceStudio 293
13.9.10 Windows 2000 Resoure Kit 294
附录A 参考 295
A.1 如何创建自定义账户来运行ASP.NET 295
A.2 如何对Active Directory使用窗体身份验证 301
A.3 如何对SQL Server 2000使用窗体身份验证 309
A.4 如何通过窗体身份验证创建GenericPrincipal对象 318
A.5 如何对Windows 2000实现Kerberos委托 324
A.6 如何实现IPrincipal 326
A.7 如何创建DPAPI库 335
A.8 如何从ASP.NET使用DPAPI(计算机存储区) 343
A.9 如何通过Enterprise Services从ASP.NET使用DPAPI(用户存储区) 348
A.10 如何创建加密库 359
A.11 如何在注册表中存储加密的连接字符串 369
A.12 如何通过Enterprise Services使用基于角色的安全性 375
A.13 如何使用客户端证书从ASP.NET调用Web服务 380
A.14 如何使用SSL调用Web服务 391
A.15 如何在Windows服务中装载远程对象 395
A.16 如何在Web服务器上设置SSL 400
A.17 如何设置客户端证书 404
A.18 如何使用IPSec在两台服务器之间提供安全通信 408
A.19 如何使用SSL保护与SQL Server 2000之间的通信 415
附录B 配置的存储位置和编辑工具 423
附录C 工作内幕 429
C.1 IIS和ASP.NET处理 429
C.2 ASP.NET管道处理 430
附录D ASP.NET标识矩阵 437