第1章 IIS 7.0介绍 1
1.1 IIS 7.0概述 1
1.1.1 模块化架构 2
1.1.2 部署和配置管理 3
1.1.3 改进的管理方式 6
1.1.4 ASP.NET集成 9
1.1.5 安全性改进 11
1.1.6 对故障排除的改进 12
1.2 应用程序池 18
1.2.1 Integrated模式 19
1.2.2 Classic模式 19
1.3 IIS 7.0组件 20
1.3.1 协议侦听器 20
1.3.2 万维网发布服务 20
1.3.3 Windows进程激活服务 20
1.4 IIS 7.0模块 22
1.4.1 非托管模块 23
1.4.2 托管模块 25
1.5 本章小结 26
第2章 IIS 7.0和AS P.NET的Integrated模式 27
2.1 IIS 7.0和ASP.NET的Integrated模式的优点 27
2.2 IIS 7.0新增的Integrated模式的架构 29
2.2.1 system.webServer配置节组 31
2.2.2 将ASP.NET应用程序迁移到Integrated模式 40
2.2.3 使用托管处理程序和托管模块扩展IIS 7.0 48
2.3 本章小结 78
第3章 IIS 7.0的Integrated模式中的HTTP请求处理 79
3.1 内置的IUSR帐户和IIS_IUSRS组 80
3.2 在Integrated模式中针对每个请求的安全控制 81
3.2.1 请求的安全标识的保存位置 87
3.2.2 建立操作系统线程标识 92
3.3 统一的处理管道 99
3.3. 1线程标识和异步管道事件 101
3.3.2 AuthenticateRequest 111
3.3.3 DefaultAuthentication和Thread.CurrentPrincipal 118
3.3.4 PostAuthenticateRequest 121
3.3.5 AuthorizeRequest 123
3.3.6 通过PreRequestHandler Execute执行的PostAuthorize Request 136
3.3.7 在IIS一级阻塞请求 136
3.3.8 异步页面执行过程中的标识 138
3.3.9 EndRequest 144
3.4 本章小结 145
第4章 信任问题 147
4.1 ASP.NET信任级别的含义 147
4.1.1 配置信任级别 150
4.1.2 信任级别分析 155
4.1.3 从实用的角度再看信任级别 162
4.1.4 创建自定义信任级别 167
4.1.5 其他信任级别定制 171
4.1.6 在中等信任级别或部分信任ASP.NET应用程序中使用LINQ 179
4.1.7 ASP.NET定义的默认安全权限 182
4.1.8 有关部分信任的高级主题 195
4.2 本章小结 222
第5章 配置系统的安全 225
5.1 使用<location/>元素 225
5.1.1 Path属性 227
5.1.2 allowOverride属性 228
5.2 使用lockAttributes 228
5.2.1 锁定配置属性 229
5.2.2 锁定元素 231
5.2.3 锁定提供程序的定义 233
5.3 管理IIS 7.0配置与管理ASP.NET配置 235
5.4 使用托管模块和托管处理程序扩展IIS 7.0 237
5.5 管理本机配置系统与管理托管配置系统 238
5.6 IIS 7.0功能委托 239
5.7 读写配置 245
5.7.1 读取本地配置所需的权限 249
5.7.2 写入本地配置所需的权限 251
5.7.3 进行远程编辑所需的权限 253
5.8 部分信任级别的配置 255
5.8.1 requirePermission属性 257
5.8.2 利用配置类要求权限 258
5.8.3 FileIOPermission和设计时API 260
5.9 受保护配置 261
5.9.1 保护范围 262
5.9.2 选择受保护的配置提供程序 263
5.9.3 定义受保护配置提供程序 266
5.9.4 DpapiProtectedConfiguration-Provider 266
5.9.5 RsaProtectedConfiguration-Provider 269
5.9.6 aspnet_regiis选项 275
5.9.7 在部分信任应用程序中使用受保护配置提供程序 276
5.9.8 使用自定义提供程序对配置进行重定向 279
5.10 本章小结 287
第6章 表单身份验证 289
6.1 快速回顾表单身份验证 289
6.2 了解持久性票证 290
6.3 动态地保证票证的安全 296
6.3.1 签名票证的安全程度 296
6.3.2 ASP.NET 2.0和ASP.NET 3.5提供的加密选项 301
6.4 设置特定于Cookie的安全选项 305
6.4.1 requireSSL 305
6.4.2 HttpOnly Cookies 308
6.4.3 slidingExpiration 310
6.5 使用无Cookie的表单身份验证 310
6.5.1 无Cookie选项 312
6.5.2 使用无Cooke票证进行重播攻击 317
6.5.3 页面中的无Cookie票证和其他URL 319
6.5.4 使用无Cookie票证情况下的负载的规模 321
6.5.5 预期外的重定向行为 323
6.6 在IIS 7.0中配置表单身份验证 325
6.7 在ASP.NET 1.1、2.0和3.5之间共享票证 325
6.8 针对不同的内容类型使用表单身份验证 327
6.9 利用UserData属性 331
6.10 在应用程序之间传递票证 334
6.10.1 Cookie域 334
6.10.2 跨应用程序共享票证 335
6.11 强制性的单一登录和退出 359
6.11.1 强制性的单一登录 359
6.11.2 强制性退出 369
6.12 本章小结 373
第7章 将ASP.NET安全与Classic ASP进行集成 375
7.1 IIS 5 ISAPI扩展的行为 376
7.2 IIS 7.0通配符映射 377
7.2.1 配置通配符映射 378
7.2.2 资源类型设置 383
7.3 DefaultHttpHandler 384
7.4 使用DefaultHttpHandler 386
7.5 在IIS 7.0 Integrated模式中为Classic ASP提供服务 389
7.6 使用ASP.NET对Classic ASP进行身份验证 390
7.6.1 了解无Cookie的表单身份验证是否能够正常工作 393
7.6.2 将数据从ASP.NET传递给ASP 394
7.6.3 将用户名传递给ASP 396
7.7 使用IIS 7.0的Integrated模式对Classic ASP进行身份验证 396
7.8 使用ASP.NET对Classic ASP进行授权 398
7.8.1 将用户角色传递给Classic ASP 399
7.8.2 将敏感数据安全地传递给Classic ASP 401
7.8.3 散列Helper类的完整代码列表 409
7.9 使用IIS 7.0 Integrated模式对Classic ASP进行授权 413
7.10 本章小结 417
第8章 会话状态 419
8.1 比较会话状态与登录会话 419
8.2 会话数据划分 421
8.3 基于Cookie的会话 423
8.3.1 在不同应用程序之间共享Cookie 423
8.3.2 保护会话Cookie 425
8.3.3 会话ID重用 425
8.4 无Cookie会话 426
8.5 在IIS 7.0内部配置会话 427
8.6 在IIS 7.0 Integrated模式下运行的应用程序的会话状态 429
8.7 会话ID重用和过期的会话 437
8.8 会话ID拒绝服务攻击 438
8.9 信任级别和会话状态 441
8.10 SQL会话状态数据库的安全 446
8.11 OOP状态服务器的安全选项 448
8.12 本章小结 449
第9章 页面安全和编译安全 451
9.1 请求验证和视图状态保护 451
9.1.1 请求验证 451
9.1.2 保护视图状态的安全 452
9.2 页面编译 456
9.3 欺骗性的回发 460
9.4 站点导航的安全性 464
9.5 本章小结 469
第10章 提供程序模型 471
10.1 使用提供程序的原因 471
10.2 提供程序模型使用的模式 474
10.2.1 策略模式 474
10.2.2 工厂方法 476
10.2.3 单件模式 483
10.2.4 外观模式 485
10.3 核心提供程序类 486
10.3.1 System.Configuration.Provider类 486
10.3.2 System.Web.Configuration类 492
10.3.3 System.Configuration类 492
10.4 构造基于提供程序的功能 497
10.5 本章小结 521
第11章 成员资格 523
11.1 成员资格类 523
11.2 MembershipUser类 527
11.2.1 扩展MembershipUser 529
11.2.2 更新后的Membership-User状态 533
11.2.3 只有特定的程序属性可以进行更新 539
11.2.4 与DateTime有关的假设 540
11.3 MembershipProvider基类 542
11.3.1 基本配置 546
11.3.2 创建用户和更新用户 546
11.3.3 检索单个用户的数据 549
11.3.4 检索和搜索多个用户 550
11.3.5 对用户凭据进行验证 550
11.3.6 支持自助式密码重置或检索 552
11.3.7 跟踪在线用户 554
11.3.8 常规错误处理方法 555
11.4 成员资格功能的“主键” 557
11.5 成员资格功能支持的环境 559
11.6 使用自定义的散列算法 562
11.7 本章小结 565
第12章 SqlMembershipProvider 567
12.1 理解公用的数据库架构 567
12.1.1 存储应用程序名称 568
12.1.2 公用的用户数据表 569
12.1.3 对提供程序架构进行版本控制 572
12.1.4 使用视图查询公用数据表 574
12.1.5 将自定义功能链接到用户记录 575
12.1.6 调用LOWER函数的原因 578
12.2 成员资格数据库架构 579
12.3 使用SQL Server Express 583
12.3.1 使用SSE时的共享问题 589
12.3.2 修改SSE连接字符串 590
12.4 数据库安全 591
12.5 数据库架构和DBO用户 593
12.6 修改密码格式 595
12.7 自定义密码生成 597
12.8 实现自定义加密方案 601
12.9 执行自定义密码强度规则 604
12.9.1 挂接ValidatePassword事件 607
12.9.2 实现密码历史记录 608
12.10 帐户锁定 626
12.11 实现自动解锁 629
12.12 支持动态应用程序 635
12.13 通过IIS 7.0管理应用程序的用户 641
12.14 本章小结 645
第13章 ActiveDirectoryMembership Provider 647
13.1 ActiveDirectoryMembership-Provider支持的目录架构 647
13.2 提供程序配置 650
13.2.1 目录连接设置 650
13.2.2 目录架构映射 653
13.2.3 针对搜索的提供程序设置 656
13.2.4 MembershipProvider设置 657
13.3 提供程序功能的独特方面 659
13.4 ActiveDirectoryMembership-User 662
13.4.1 IsApproved和IsLockedOut 663
13.4.2 使用ProviderUserKey程序属性 664
13.5 使用Active Directory 665
13.5.1 UPN和ASM帐户名称 667
13.5.2 容器嵌套 669
13.5.3 保护容器的安全 670
13.5.4 配置自助服务密码重置 676
13.6 使用ADLDS 684
13.6.1 使用应用程序分区安装ADLDS 685
13.6.2 使用应用程序分区 690
13.7 在部分信任条件下使用提供程序 692
13.8 本章小结 698
第14章 角色管理器 699
14.1 Roles类 699
14.2 RolePrincipal类 703
14.3 RoleManagerModule模块 715
14.3.1 PostAuthenticateRequest 716
14.3.2 EndRequest 719
14.3.3 角色缓存Cookie的设置及行为 720
14.3.4 在GetRoles中使用多个提供程序 722
14.4 RoleProvider 730
14.4.1 基本配置 732
14.4.2 授权方法 733
14.4.3 管理角色和角色关联 733
14.5 WindowsTokenRoleProvider 734
14.6 本章小结 741
第15章 SqlRoleProvider 743
15.1 SqlRoleProvider数据库架构 743
15.1.1 特定于SQL Server的提供程序配置项 745
15.1.2 事务行为 746
15.2 提供程序的安全 746
15.2.1 信任级别要求及配置 747
15.2.2 数据库安全 753
15.3 使用Windows身份验证 754
15.4 基于受限的角色集运行 756
15.5 在数据层使用角色进行授权 763
15.6 支持动态应用程序 765
15.7 通过IIS 7.0管理应用程序的角色 766
15.8 本章小结 769
第16章 AuthorizationStoreRole Provider 771
16.1 提供程序设计 771
16.2 支持的功能 774
16.3 使用基于文件的策略存储 776
16.4 使用基于目录的策略存储 779
16.5 使用基于Microsoft SQL Server数据库的策略存储 788
16.6 在部分信任环境下工作 791
16.7 同时使用成员资格和角色管理 794
16.8 本章小结 797
第17章 ASP.NET AJAX 3.5中的成员资格和角色管理 799
17.1 ASP.NET成员资格和角色服务概述 799
17.1.1 ASP.NET成员资格 800
17.1.2 ASP.NET角色管理 802
17.2 ASP.NET AJAX应用程序服务 804
17.2.1 启用使用了ASP.NET AJAX 3.5的ASP.NET应用程序 804
17.2.2 启用ASP.NET应用程序服务 810
17.2.3 AuthenticationService-Manager和RoleService-Manager类 812
17.2.4 身份验证服务 814
17.2.5 角色服务 825
17.3 本章小结 830
第18章 保证ASP.NET Web应用程序安全的最佳实践 833
18.1 Web应用程序安全威胁概述 834
18.2 开发人员的注意事项 836
18.2.1 了解应用程序的用户 836
18.2.2 以最低权限运行应用程序 838
18.2.3 验证用户输入 839
18.2.4 保护Cookie的安全 848
18.2.5 保护数据库访问的安全 850
18.2.6 SQL注入攻击 859
18.2.7 跨网站脚本攻击 863
18.2.8 跨网站请求伪造 867
18.2.9 合理地处理异常 871
18.2.10 防止拒绝服务攻击 876
18.2.11 确保数据传输的安全 882
18.3 启用了AJAX的应用程序的安全性 882
18.3.1 信息泄露 883
18.3.2 JSON劫持 885
18.3.3 放大的跨网站脚本 887
18.4 本章小结 889