第1章 Web应用程序安全 1
1.1 OWASP Top 10 2
1.2 总体原则 3
1.2.1 安全是一种特性 4
1.2.2 使用最低权限 4
1.2.3 预防、监测和反应 4
1.2.4 分层防御 5
1.2.5 不存在可信的输入 5
1.2.6 注意故障模式 5
1.2.7 注意应用程序拒绝服务 5
1.2.8 首选默认安全措施 5
1.2.9 加密不能确保安全 6
1.2.10 防火墙不能确保安全 6
1.3 小结 7
第2章 ASP.NET 2.0架构 8
2.1 理解宿主 8
2.2 理解管线 12
2.2.1 HTTP模块 12
2.2.2 编写模块 14
2.2.3 处理程序 15
2.2.4 检查管线 16
2.3 编译ASP.NET页 19
2.4 小结 22
第3章 输入验证 23
3.1 什么是输入 23
3.2 输入验证的必要性 25
3.3 输入验证技术 32
3.3.1 黑名单 32
3.3.2 白名单 35
3.4 缓解技术 39
3.4.1 输出编码 39
3.4.2 沙盒 43
3.4.3 完整性检查 44
3.5 ASP.NET应用程序中的验证 45
3.5.1 自动验证服务 45
3.5.2 表单验证 53
3.5.3 创建自定义验证控件 64
3.6 小结 71
第4章 存储机密 72
4.1 识别攻击和攻击者 72
4.2 加密术是救星吗 73
4.3 哈希数据 73
4.3.1 哈希算法 74
4.3.2 .NET的哈希算法 75
4.4 保存密码 76
4.5 加密数据 79
4.5.1 对称性加密 79
4.5.2 加密算法 80
4.5.3 密钥和密钥大小 81
4.5.4 .NET的对称性加密 86
4.5.5 完整性保护 87
4.5.6 整合:设计使用对称性加密的应用程序 89
4.5.7 非对称性加密 96
4.5.8 证书 97
4.5.9 在.NET中使用非对称性加密证书 99
4.5.10 整合:设计使用非对称性加密和证书的应用程序 104
4.6 使用Windows数据保护API 110
4.7 保护配置数据 113
4.7.1 配置和安装 114
4.7.2 保护配置 116
4.8 保护ViewState 120
4.9 小结 123
第5章 验证和授权 125
5.1 基础知识 125
5.1.1 术语 126
5.1.2 应用程序设计 126
5.1.3 ASP.NET安全管道 129
5.1.4 .NET安全架构和基于角色的安全 131
5.1.5 服务器验证 136
5.2 使用Windows账户 137
5.2.1 IIS验证方法 138
5.2.2 授权 143
5.2.3 模拟 143
5.2.4 委托 152
5.2.5 安全上下文和访问外部资源 158
5.3 使用自定义账户 161
5.3.1 表单验证 162
5.3.2 表单验证机制 165
5.3.3 配置表单验证 167
5.3.4 确保表单验证的安全 168
5.3.5 自定义表单验证 169
5.3.6 Web场 177
5.3.7 单点登录 178
5.3.8 使用ASP.NET保护非ASP.NET资源 182
5.4 混合方法 188
5.4.1 手动Windows验证 188
5.4.2 协议转换 197
5.4.3 对自定义账户实现基本验证 198
5.4.4 用户证书 201
5.4.5 混合模式验证 210
5.5 小结 216
第6章 安全提供程序和控件 217
6.1 理解成员功能 218
6.1.1 方法 218
6.1.2 事件 221
6.1.3 成员配置 222
6.1.4 SQL成员提供程序 222
6.1.5 Active Directory成员提供程序 225
6.1.6 与成员相关的控件 227
6.2 理解角色管理器 232
6.2.1 角色管理器模块 234
6.2.2 角色管理器配置 236
6.2.3 SQL角色提供程序 238
6.2.4 Windows令牌角色提供程序 239
6.2.5 授权存储角色提供程序 242
6.2.6 与角色相关的控件 244
6.2.7 成员和角色打包 245
6.3 使用SiteMap导航 245
6.4 创建功能和提供程序 248
6.5 指南 269
6.6 小结 270
第7章 日志和监测 271
7.1 错误处理 271
7.1.1 获取401非授权错误 274
7.1.2 错误处理 276
7.2 日志和监测 280
7.2.1 事件日志 282
7.2.2 性能监视器 284
7.2.3 电子邮件 286
7.2.4 Windows管理监测 287
7.2.5 ASP.NET跟踪和System.Diagnostics.Trace 291
7.2.6 日志和部分信任 294
7.3 健康监测框架 295
7.3.1 创建事件 296
7.3.2 配置健康检测 299
7.3.3 SQL服务器提供程序 307
7.3.4 WMI提供程序 308
7.3.5 电子邮件提供程序 309
7.3.6 编写自定义提供程序 311
7.3.7 编写自定义缓冲提供程序 314
7.3.8 状态监视和部分信任 317
7.3.9 指南 318
7.4 小结 318
第8章 部分信任ASP.NET 319
8.1 为什么选择部分信任 319
8.2 配置部分信任 324
8.3 理解策略文件 327
8.3.1 安全类 327
8.3.2 命名权限集 328
8.3.3 代码组 329
8.3.4 策略加载和解析 331
8.4 自定义策略文件 332
8.5 分割代码 337
8.5.1 重构代码 338
8.5.2 堆栈审核 341
8.5.3 为经过分区的程序集修改策略 343
8.5.4 限制调用组件的用户 346
8.6 创建自定义权限 348
8.6.1 权限类 348
8.6.2 封装 355
8.6.3 属性 355
8.7 SecurityException的作用 356
8.8 锁定配置 358
8.9 小结 359
第9章 部署和配置 360
9.1 总指导原则 360
9.2 操作系统强化 361
9.2.1 自动更新 362
9.2.2 禁用服务和协议 362
9.2.3 包过滤 364
9.2.4 保护Windows文件共享 365
9.2.5 审核 366
9.3 数据库服务器强化 366
9.4 Web服务器强化 367
9.4.1 应用程序池 367
9.4.2 Web服务扩展 368
9.4.3 Web内容 369
9.4.4 HTTP头 369
9.4.5 日志 369
9.4.6 URLScan 369
9.4.7 访问控制列表 370
9.4.8 启用SSL 372
9.4.9 验证方法 373
9.5 ASP.NET强化 373
9.5.1 配置锁死 373
9.5.2 推荐设置 376
9.5.3 预编译 380
9.6 小结 382
第10章 工具和资源 383
10.1 工具类型 383
10.2 确定合适的工具 383
10.3 浏览代理服务器和HTTP协议检测工具 384
10.3.1 Fiddler 385
10.3.2 Paros 385
10.3.3 WebScarab 385
10.3.4 WSDigger 386
10.4 黑盒扫描器 386
10.4.1 SPI Dynamics WebInspect 387
10.4.2 Watchfire AppScan 387
10.4.3 Berretta 387
10.5 配置分析 387
10.5.1 SSL Digger 387
10.5.2 PermCalc 388
10.5.3 Desaware CAS Tester 388
10.5.4 ANSA 388
10.5.5 IIS Lockdown 388
10.6 源代码分析器 388
10.6.1 Foundstone CodeScout 392
10.6.2 Microsoft PREfix和PREfast 392
10.6.3 Compuware ASP.NET Security Checker 393
10.6.4 SPI Dynamics DevInspect 394
10.7 多功能工具 394
10.8 二进制分析 399
10.8.1 静态二进制分析工具 399
10.8.2 动态(“运行时”)二进制分析 401
10.8.3 调试器 403
10.8.4 反编译器/模糊处理器 403
10.9 数据库扫描器 405
10.9.1 AppDetective 405
10.9.2 MetaCoretex 406
10.9.3 NGSSquirrel 406
10.10 博客 406
10.11 小结 408
附录A 创建自定义受保护配置提供程序 409
附录B 会话状态 413
B.1 会话状态如何工作 414
B.1.1 Cookie vs.查询字符串 414
B.1.2 超时设定 415
B.1.3 会话模式 415
B.2 会话存储 416
B.2.1 进程内提供程序 416
B.2.2 状态服务器 416
B.2.3 SQL Server 417
B.3 小结 419
附录C 分拆ASP.NET应用程序 420
C.1 创建服务器端 421
C.2 创建客户端 424
C.3 创建部分信任客户端 425
C.4 小结 427
附录D 安全的Web服务 428
D.1 适用情况 428
D.2 安全的通信和服务器验证 428
D.3 客户端验证 430
D.4 小结 431
附录E 使用Visual StudioTeam Edition进行单元测试 432
E.1 测试驱动开发 432
E.2 运行测试 433
E.3 测试现有代码 434
E.4 测试列表和测试运行配置 435
E.5 建立正确的测试环境 437
E.6 测试私有方法 438
E.7 预期的错误 439
E.8 数据驱动测试 440
E.9 数据驱动测试的数据管理 442
E.10 测试Web服务代码 443
E.11 在ASP.NET内部运行测试 445
E.12 小结 447