这是一本为脆弱的ASP.NET Web应用程序提供完美解决方案的书。不仅讲解了ASP.NET Web应用程序可能受到的各种威胁,而且提供了理想的解决方案。对于重要的安全技术,还提供了典型的案例,并穿插了实用技巧。本书的最大特点是其务实性,即先提出问题(安全威胁),再有针对性地给出解决方案(安全技术),并对各种可能性进行提纲挈领式的总结。本书内容快览·管理用户·访问数据·验证和授权用户·开发安全的ASP.NET应用程序·管理会话·保护XML·加密私有数据·附录A:理解.NET安全·对用户输入的过滤·附录B:Web应用程序安全威胁术语表本书详细介绍了ASP.NET Web应用程序面对的各种威胁和攻击,并有针对性地提供了完美解决方案。运用本书介绍的安全技术基本上可以抵御到目前为止出现的各种黑客攻击,如账号劫持、社会工程、跨站点脚本、暴力攻击等。 对于ASP.NET Web程序开发人员而言,本书可谓是一本非常实用的参考书,同时也知适合网络管理员参考学习。译者序 对于Web应用程序来说, 若安全措施脆弱, 或存在潜在的安全漏洞, 无异于敞开大门不设防的银行, 对于用户来说, 在不安全的网站上输入用户名和密码, 实际上使自己的隐私置入危险之中, 对于黑客来说, 各种安全隐患则成为他们的有力攻击目标. 随着网络应用的进一步深入, 网络安全的重要性也日益凸现. 有人将各种网络攻击比做"洪水猛兽"也毫不为过. 抵御这种"洪水猛兽"的根本途径是堵塞各种安全漏洞, 构筑坚固的Web应用程序. 本书正是这样一本为脆弱的ASP. NET Web应用程序提供完美解决方案的参考书籍. 本书讲解了ASP. NET Web应用程序可能受到的各种威胁, 并提供了理想的解决方案. 对于重要的安全技术, 本书还提供了典型的案例. 本书的最大特点是其务实性, 即先提出问题(安全威胁), 再有针对性地给出解决方案(安全技术), 并对各种可能性进行提纲挈领式的总结. 当然, 黑客技术与安全技术永远是"攻"与"防"的两个对立面, 它们的技术也在不断地发展. 即使充分运用了本书介绍的安全技术, 也不可能一劳永逸, 因为攻击技术无时无刻不在更新. 何况, 应用程序在升级过程中, 由于种种原因, 也可能引入新的攻击点, 无形中扩大了攻击面. 因此, 阅读此书时, 我们要理解其精髓, 在安全维护中做到举一反三. 由于译者水平有限, 且时间仓促, 错误在所难免, 希望广大读者不吝指正. 我的E-mail地址是:web_zhou@21cn. com. 译者 Mark Burnett(微软MVP)他是一位独立安全顾问和自由作家, 也是一位基于Windows的IIS Web服务器的安全专家. Mark是MaximumWindowsSecurity一书的合作者, 也是Stealing the Network:How to Own the Box(Syngress Publishing, 1-9311836-87-6)和Dr. Tom Shinder‘s ISA Server and Beyond:Real World SecuritySolutions for Microsoft Enterprise Networks(Syngress Publishing, ISBN:1-931836-66-3)撰稿人之一. 他是Syngress出版社Special Ops:Host and Network Security for Microsoft, UNIX,and Oracle(ISBN:1-931836-69-8)一书的撰稿人和技术编辑. Mark曾在多次安全会议上发表演讲, 并在Windows &. NEI:Information Security,Windows Web Solutions, Security Administrator杂志上发表多篇技术文章, 还经常给SecurityFoucs. com投稿. Mark还在自己的Web站点IISSecurity.info上发表语文章. 第1章管理用户 1.1引言 1.1.1理解威胁 1.2建立用户证书 1.2.1实施强密码 1.2.2避免使用易于猜测的证书 1.2.3防止证书获取 1.2.4限制空闲的账户 1.3管理密码 1.3.1存储密码 1.3.2密码时效和历史记录 1.3.3改变密码 1.4重新设置丢失或被遗忘的密码 1.4.1重新设置密码 1.4.2通过电子邮件发送信息 1.4.3分配临时密码 1.4.4使用秘密问题 1.5授权用户 1.5.1教育用户 1.5.2证用户置身其中 1.6编码标准快速参考 1.6.1建立用户证书 1.6.2管理密码 1.6.3重新设置丢失或被遗忘的密码 1.6.4授权用户 1.7代码审查快速参考 1.7.1建立用户证书 1.7.2管理密码 1.7.3重新设置丢失或被遗忘的密码 1.7.4授权用户 1.8常见问题 第2章验证和授权用户 2.1引言 2.1.1理解威胁 2.2验证用户 2.2.1构建登录表单 2.2.2使用表单验证 2.2.3使用Windows验证 2.2.4使用Passport验证 2.2.5阻塞暴力攻击 2.3授权用户 2.3.1决定如何授权 2.3.2使用文件授权 2.3.3应用URL授权 2.3.4通过代码授权用户 2.4编码标准快速参考 2.4.1验证用户 2.4.2授权用户 2.5代码审查快速参考 2.5.1验证用户 2.5.2授权用户 2.6常见问题 第3章管理会话 3.1引言 3.1.1会话标记 3.1.2验证标记 3.1.3理解威胁 3.2维持状态 3.2.1设计安全标记 3.2.2选择标记机制 3.2.3使用状态提供器 3.3使用ASP.NET标记 3.3.1使用cookie 3.3.2使用视图状态 3.4ASP.NET状态管理 3.4.1创建标记 3.4.2终止会话 3.5编码标准快速参考 3.5.1维持状态 3.5.2使用ASP.NET标态 3.5.3增强ASP.NET状态管理 3.6代码审查快速参考 3.6.1维持状态 3.6.2使用ASP.NET标记 3.6.3增强ASP.NET状态管理 3.7常见问题 第4章加密私有数据 4.1引言 4.2使用ASP.NET中的加密技术 4.2.1使用对称加密技术 4.2.2使用非对称加密技术 4.2.3使用哈希算法 4.3利用.NET加密特性 4.3.1创建随机数 4.3.2保持内存清洁 4.3.3保护机密内容 4.4使用SSL保护通信 4.5编码标准快速参考 4.5.1在ASP.NET中使用加密技术 4.5.2利用.NET加密特性 4.6代码审查快速参考 4.6.1在ASP.NET中使用加密技术 4.6.2利用.NET加密特性 4.7常见问题 第5章过滤用户输入 5.1引言 5.2恶意输入处理 5.2.1识别输入源 5.2.2防御性编程 5.3输入约束 5.3.1边界检查 5.3.2模式匹配 5.3.3数据映射 5.3.4数据编码 5.3.5封装 5.3.6参数化 5.3.7双重解码 5.3.8语法检查 5.3.9异常处理 5.3.10HoneyDrop 5.4限制恶意输入下的暴露 5.4.1减少攻击面 5.4.2限制攻击范围 5.4.3坚固服务器应用程序 5.5编码标准快速参考 5.5.1处理恶意输入 5.5.2约束输入 5.5.3限制恶意输入下的暴露 5.6代码审查快速参考 5.6.1处理恶意输入 5.6.2约束输入 5.6.3限制恶意输入下的暴露 5.7常见问题 第6章访问数据 6.1引言 6.2保护数据库 6.2.1保护数据库位置 6.2.2限制攻击面 6.2.3保证最小特权 6.2.4保护数据库 6.3编写安全的数据访问代码 6.3.1连接数据源 6.3.2阻止SQL注入 6.3.3编写安全SQL代码 6.3.4读写数据文件 6.4编码标准快速参考 6.4.1保护数据库驱动程序 6.4.2保护数据库 6.4.3编写安全的数据访问代码 6.5代码审查快速参考 6.5.1保护数据库驱动程序 6.5.2保护数据库 6.5.3编写安全的数据访问代码 6.6常见问题 第7章开发安全的ASP.NET应用程序 7.1引言 7.1.1理解威胁 7.2编写安全的HTML 7.2.1构造安全的HTML 7.2.2阻止信息汇漏 7.3处理异常 7.3.1使用结构化错误处理 7.3.2报告和记录错误 7.4编码标准快速参考 7.4.1编写安全的HTML 7.4.2处理异常 7.5代码审查快速参考 7.5.1编写安全的HTML 7.5.2处理异常 7.6常见问题 第8章保护XML 8.1引言 8.2应用XML加密 8.2.1加密XML数据 8.3应用XML数字签名 8.3.1XML数据签名 8.4编码标准快速参考 8.4.1应用XML加密 8.4.2应用XML数字签名 8.5代码审查快速参考 8.5.1应用XML加密 8.5.2应用XML数字签名 8.6常见问题 附录A理解.NET安全 附录BWeb应用程序安全威胁术语表