第1章 ASP.NET动态网页开发概述 1
1.1 动态网页开发技术简介 1
1.1.1 ASP动态网页技术 1
1.1.2 JSP动态网页技术 2
1.1.3 PHP动态网页技术 3
1.2 .NET Framework概览 3
1.2.1 .NET Framework概念概述 4
1.2.2 .NET Framework 3.5体系结构 6
1.3 ASP.NET简介 6
1.3.1 ASP.NET简介 7
1.3.2 ASP.NET主要特性 7
1.4 ASP.NET 3.5的新特性 8
1.4.1 对AJAX和JavaScript支持 8
1.4.2 ADO.NET的改进 10
1.4.3 对Silverlight和XAML的支持 10
1.4.4 对WCF的改进 10
1.5 ASP.NET开发工具简介 10
1.5.1 Visual Studio.NET 10
1.5.2 ASP.NET Web Matrix 12
1.6 配置ASP.NET运行环境 13
1.6.1 运行环境系统要求 13
1.6.2 安装IIS 14
1.6.3 安装.NETFramework 16
1.6.4 测试运行环境 16
1.7 小结 20
第2章 Web安全简介 21
2.1 Web安全基础 21
2.1.1 理解Web安全 21
2.1.2 Web安全策略基础 22
2.1.3 安全通信 22
2.2 Web安全开发技术 23
2.2.1 IIS安全技术支持 23
2.2.2 ASP.NET安全技术支持 25
2.2.3 企业服务(Enterprise Services)安全技术支持 26
2.2.4 SQL Server安全技术支持 26
2.3 Web安全设计原则 27
2.4 Web应用程序的体系结构与设计安全性考虑 28
2.5 Web部署安全性考虑 29
2.6 Web客户端输入验证 30
2.7 Web客户端身份验证 32
2.8 Web授权访问技术 34
2.9 Web应用的配置管理 36
2.10 Web敏感数据的安全性考虑 37
2.10.1 机密数据 37
2.10.2 敏感的用户个人数据 38
2.11 Web应用会话管理的安全性考虑 39
2.12 Web应用加密技术 39
2.13 Web参数操作的安全性问题 40
2.14 Web应用异常管理 41
2.15 Web应用审核与日志机制 41
2.16 Web用户安全概述 42
2.17 建立用户证书 43
2.17.1 实施强密码 43
2.17.2 避免使用易猜测的证书 44
2.17.3 防止证书获取 45
2.17.4 限制空闲的账户 45
2.18 管理密码 46
2.18.1 存储密码 46
2.18.2 密码时效和历史记录 47
2.18.3 改变密码 48
2.19 重新设置丢失或被遗忘的密码 49
2.19.1 重新设置密码 49
2.19.2 通过电子邮件发送信息 52
2.19.3 分配临时密码 52
2.19.4 使用密码的提示问题 52
2.20 授权用户 52
2.20.1 教育用户 53
2.20.2 让用户置身其中 53
2.21 小结 53
第3章 ASP.NET应用程序的安全架构 55
3.1 .NET Web应用程序架构 55
3.1.1 多层应用程序架构 55
3.1.2 Web应用程序物理部署模型 56
3.1.3 ASP.NET关键技术 57
3.2 ASP.NET安全体系结构 58
3.2.1 ASP.NET安全结构 59
3.2.2 ASP.NET安全数据流 59
3.2.3 ASP.NET身份验证 62
3.2.4 ASP.NET授权 62
3.2.5 ASP.NET关守和关口 64
3.2.6 ASP.NET模拟 65
3.3 ASP.NET框架安全机制 66
3.3.1 代码访问安全性 66
3.3.2 主体和标识 67
3.3.3 WindowsPrincipal和WindowsIdentity 68
3.3.4 GenericPrincipal和相关的标识对象 68
3.3.5 ASP.NET和HttpContext.User 69
3.4 .NET Remoting和Web服务安全机制 69
3.4.1 .NET Remoting安全机制 69
3.4.2 Web服务安全机制 69
3.5 小结 70
第4章 ASP.NET中的输入验证 71
4.1 输入验证技术 71
4.1.1 输入验证技术简介 71
4.1.2 输入验证技术 72
4.2 缓解技术 73
4.2.1 输出编码机制 73
4.2.2 沙盒机制 75
4.2.3 完整性检查机制 75
4.3 ASP.NET应用程序中的验证 75
4.3.1 自动验证服务 75
4.3.2 表单验证 77
4.3.3 创建自定义验证控件 78
4.4 ASP.NET输入验证实例 87
4.5 小结 92
第5章 ASP.NET中的存储加密技术 93
5.1 识别攻击和攻击者 93
5.2 加密技术 95
5.3.1 加密技术简介 95
5.3.2 加密的必要性 95
5.3 哈希数据 96
5.3.1 哈希算法 96
5.3.2 .NET的哈希算法 96
5.3.3 .NET常用哈希算法的使用 97
5.3.4 C#中实现常用的哈希算法加密 98
5.4 .NET数据保护措施 104
5.4.1 加密算法 104
5.4.2 密钥和密钥大小 105
5.4.3 对称性加密 105
5.4.4 .NET的对称性加密 106
5.4.5 非对称性加密 108
5.4.6 在.NET中使用非对称性加密证书 109
5.4.7 证书 111
5.4.8 完整性保护 112
5.5 使用Windows数据保护API 113
5.5.1 DPAPI简介 113
5.5.2 DPAPI使用实例 114
5.6 保护配置数据 119
5.6.1 保护配置数据的前提 119
5.6.2 确定要保护的配置数据 120
5.6.3 加密选项 121
5.6.4 以编程方式对配置文件进行加密 122
5.6.5 命令行工具aspnet regiis.exe介绍 123
5.7 保护ViewState 124
5.8 小结 128
第6章 ASP.NET身份验证和授权机制 129
6.1 使用Windows身份验证 129
6.1.1 Windows身份验证的工作方式 130
6.1.2 ASP.NET中Windows身份验证API 131
6.1.3 实现Windows身份验证 131
6.1.4 自定义Windows身份验证 135
6.2 使用.NET passport身份验证 136
6.2.1 .NET passport身份验证的工作方式 136
6.2.2 实现.NET passport身份验证 137
6.2.3 .NET passport类 140
6.2.4 自定义.NET passport身份验证 140
6.3 使用窗体身份验证 140
6.3.1 窗体身份验证的工作方式 141
6.3.2 窗体身份验证API 141
6.3.3 实现窗体身份验证 142
6.4 自定义身份验证 143
6.4.1 为自定义身份验证配置web.config 144
6.4.2 处理AuthenticateRequest事件 144
6.4.3 创建自己的主体和标识 144
6.4.4 在运行阶段附加自定义身份验证 145
6.5 ASP.NET中授权方式 145
6.5.1 基于角色的授权 145
6.5.2 基于资源的授权 150
6.6 综合实例 151
6.6.1 Forms身份验证实例 151
6.6.2 Windows身份验证实例 159
6.7 小结 159
第7章 ASP.NET代码访问安全 161
7.1 代码访问安全性介绍 161
7.2 代码访问安全性基础知识 162
7.2.1 编写可验证为类型安全的代码 162
7.2.2 安全性语法 163
7.2.3 请求权限 164
7.2.4 使用安全类库 171
7.2.5 使用托管包装类 172
7.3 编写安全类库 172
7.3.1 安全要求 172
7.3.2 重写安全检查 175
7.3.3 用于类和成员范围的声明式安全 179
7.3.4 安全优化 180
7.3.5 安全透明的代码 182
7.4 编写安全托管控件 184
7.4.1 开发 184
7.4.2 部署 184
7.5 创建自己的代码访问权限 185
7.5.1 设计权限 185
7.5.2 实现自定义权限 186
7.5.3 添加声明式安全支持 193
7.5.4 请求自定义权限 194
7.5.5 更新安全策略 194
7.5.6 创建其他自定义权限 195
7.6 小结 196
第8章 部分信任ASP.NET 197
8.1 为什么选择部分信任 197
8.2 配置部分信任 198
8.3 理解策略文件 199
8.3.1 策略文件的内容 199
8.3.2 策略程序集 201
8.3.3 命名权限集 201
8.3.4 代码组 202
8.3.5 修改策略文件 203
8.3.6 自定义策略 204
8.4 堆栈审核 205
8.4.1 修改堆栈审核 205
8.4.2 堆栈修改实例介绍 206
8.5 SecurityException的作用 207
8.6 锁定ASP.NET配置 211
8.7 在部分受信任的代码中调用程序集 212
8.7.1 通过部分受信任的代码使用库 212
8.7.2 何时启用部分受信任的调用方 213
8.7.3 通过部分受信任的代码访问共享库 213
8.7.4 对APTCA程序集中的某些类型要求完全信任 214
8.7.5 标有APTCA的.NET Framework程序集 215
8.7.6 如何:让部分受信任的代码无法访问APTCA程序集 215
8.7.7 从程序集中移除部分信任 216
8.8 小结 216
第9章 ASP.NET Web服务安全机制 217
9.1 Web服务体系结构 217
9.1.1 Web服务分层架构 217
9.1.2 Web服务堆栈 218
9.2 Web服务安全模型 218
9.2.1 平台级安全性 218
9.2.2 应用程序级安全性 219
9.2.3 消息级安全性 220
9.3 Web服务身份验证和授权策略 221
9.3.1 带模拟功能的Windows身份验证 221
9.3.2 不带模拟功能的Windows身份验证 222
9.3.3 使用固定标识的Windows身份验证 224
9.3.4 实现Web服务的Windows身份验证配置 224
9.3.5 自定义SOAP身份验证 229
9.3.6 用于授权的基于角色的安全 233
9.4 Web服务加密方法 236
9.4.1 SSL加密 236
9.4.2 SOAP加密 241
9.4.3 XML签名与加密技术 246
9.5 Web服务配置安全策略 251
9.5.1 配置IIS设置 252
9.5.2 配置ASP.NET设置 253
9.5.3 保护资源安全 253
9.5.4 禁用HTTP-GET、HTTP-POST 253
9.6 Web服务安全通信 254
9.6.1 传输级安全通信 254
9.6.2 消息级安全通信 255
9.7 小结 256
第10章 .NET Remoting安全机制 257
10.1 .NET Remoting体系结构 257
10.1.1 .NET Remoting简介 258
10.1.2 .NET Remoting接收 266
10.1.3 ASP.NET和HTTP通道 269
10.1.4 .NET Remoting网关守卫 270
10.2 .NET Remoting的身份验证与授权 271
10.2.1 将身份验证驻留在ASP.NET中 271
10.2.2 将身份验证驻留在Windows服务中 272
10.2.3 自定义.NET Remoting身份验证 272
10.2.4 授权 272
10.2.5 身份验证和授权策略 273
10.2.6 将身份验证的凭据传递给远程对象 274
10.2.7 传递原调用方 276
10.3 .NET Remoting资源访问控制 278
10.3.1 系统资源访问控制 278
10.3.2 网络资源访问访问 278
10.4 受信任的子系统模型 279
10.5 .NET Remoting安全通信 281
10.6 选择.NET Remoting的主机进程 281
10.6.1 驻留在ASP.NET中 282
10.6.2 驻留在Windows服务中 282
10.6.3 驻留在控制台应用程序中 283
10.7 .NET Remoting与Web服务安全性比较 283
10.8 小结 284
第11章 数据库访问安全机制 285
11.1 数据库访问威胁与对策 285
11.1.1 SQL注入 286
11.1.2 配置数据的泄漏 287
11.1.3 敏感应用程序数据的泄漏 287
11.1.4 数据库架构和连接详细信息的泄漏 288
11.1.5 未授权访问 288
11.1.6 网络侦听 289
11.2 数据库访问编码设计注意事项 289
11.3 输入验证 291
11.4 SQL注入 291
11.5 数据访问身份验证 293
11.5.1 使用Windows身份验证 294
11.5.2 保护SQL身份验证的凭据 294
11.5.3 使用最低特权账户连接 294
11.6 数据访问授权 295
11.6.1 限制未授权的调用方 296
11.6.2 限制未授权的代码 297
11.6.3 在数据库中限制应用程序 297
11.7 数据访问配置管理 297
11.7.1 使用Windows身份验证 298
11.7.2 保护应用程序的连接字符串 298
11.7.3 用受限的ACL保护UDL文件 299
11.8 保护敏感数据 299
11.8.1 对存储的敏感数据加密 299
11.8.2 保护跨网络传输的敏感数据 300
11.8.3 存储带salt值的密码散列值 300
11.9 数据访问异常管理 301
11.9.1 捕获和记录ADO.NET异常 301
11.9.2 确保关闭数据库连接 304
11.9.3 在ASP.NET应用程序中使用一般性错误页 304
11.10 构建安全的数据访问组件 305
11.11 代码访问安全性注意事项 307
11.12 数据库服务器部署注意事项 307
11.13 SQL Server安全性支持 308
11.13.1 SQL Server安全性概述 309
11.13.2 SQL Server中的身份验证 310
11.13.3 SQL Server中的服务器和数据库角色 311
11.13.4 SQL Server中的所有权和用户架构分离 312
11.13.5 SQL Server中的授权和权限 314
11.13.6 SQL Server中的数据加密 315
11.13.7 SQL Server中的CLR集成安全性 316
11.14 保证ADO.NET的安全 316
11.14.1 ADO.NET的安全性概述 316
11.14.2 ADO.NET安全数据访问 318
11.14.3 ADO.NET安全客户端应用程序 319
11.14.4 代码访问安全性和ADO.NET 320
11.14.5 ADO.NET的隐私和数据安全 323
11.15 小结 324
第12章 ASP.NET的日志和监测机制 325
12.1 错误处理 325
12.1.1 了解401非授权错误 325
12.1.2 错误处理 327
12.1.3 错误处理程序的完整示例 329
12.2 日志和监测 337
12.2.1 事件日志 337
12.2.2 性能监视器 345
12.2.3 电子邮件 345
12.2.4 ASP.NET跟踪 345
12.2.5 日志和部分信任 348
12.3 健康监测系统 349
12.3.1 创建自定义监视事件 349
12.3.2 配置健康检测 353
12.3.3 SQL服务器提供程序 357
12.3.4 WMI提供程序 359
12.3.5 电子邮件提供程序 363
12.3.6 缓冲事件提供程序 367
12.3.7 事件日志提供程序 372
12.3.8 编写自定义提供程序 373
12.3.9 状态监视和部分信任 376
12.4 小结 382
第13章 构建安全的ASP.NET应用程序 383
13.1 总指导原则 383
13.2 操作系统强化 384
13.2.1 自动更新 385
13.2.2 禁用服务和协议 385
13.2.3 包过滤 388
13.2.4 保护Windows文件共享 389
13.2.5 审核 394
13.3 数据库服务器强化 394
13.3.1 修补程序和更新程序 394
13.3.2 服务 395
13.3.3 协议 396
13.3.4 账户 397
13.3.5 文件和目录 399
13.3.6 共享 400
13.3.7 端口 400
13.3.8 注册表 401
13.3.9 审核和日志 402
13.4 Web服务器强化 402
13.4.1 应用程序池 402
13.4.2 Web服务扩展 404
13.4.3 Web内容 407
13.4.4 HTTP头 407
13.4.5 日志 407
13.4.6 URLScan 408
13.4.7 访问控制列表 408
13.4.8 启用SSL 408
13.4.9 验证方法 408
13.5 ASP.NET强化 409
13.5.1 配置锁死 409
13.5.2 推荐设置 409
13.5.3 预编译 409
13.6 小结 410
第14章 综合案例 411
14.1 案例前言 411
14.2 系统总体设计 411
14.2.1 系统需求分析 411
14.2.2 系统安全框架设计 413
14.2.3 系统功能设计 414
14.2.4 模块功能划分 415
14.3 数据库设计 416
14.3.1 数据库分析与设计 416
14.3.2 数据表的创建 418
14.3.3 数据库表关系图设计 424
14.4 系统实现 425
14.4.1 系统整体实现 425
14.4.2 系统身份验证 440
14.4.3 数据加密 444
14.4.4 输入验证 445
14.4.5 系统异常处理 450
14.5 系统部署安全考虑 450
14.5.1 配置服务器操作系统安全 451
14.5.2 配置服务器防火墙 457
14.6 小结 458