第17 章 ASP.NET 的安全性 17.1 威胁来自何方 17.2 ASP.NET 安全性上下文 17.3 使用 Forms 身份验证 17.4 成员资格与角色管理 API 17.5 安全性相关的控件 许多开发者都认识到,安全性并不是一项能够事后添加到现有应用程序的功能。换而言之,不能等到开发阶段的后期才引入它。安全性是应用程序的固有特性,应作为设计阶段的首要任务来规划。 因其本性使然,Web 应用程序很容易遭受各种类型的攻击,根据应用程序本身的特性,其毁坏力和影响程度是不同的。最安全的Web应用程序是那些能够实际抵御攻击的应用程序,而不是设计上完美无缺的应用程序。安全性是一个相当复杂的问题,不同应用程序的解决方案各不相同。但应记住,安全性的实现需要同时在应用程序级和系统级采取合理的措施。 ASP.NET 提供了内建的应用程序级保护基础架构,能够防止对 Web 页面的未授权访问,这样便简化了安全应用程序的编写。但应意识到,这种安全性只是安全性的一个方面。真正安全的Web 站点能够很好地防御服务器攻击,而这种攻击很可能会逾越应用程序最坚实的逻辑防线。 本章将讨论 ASP.NET 安全环境,其中包括它与服务器端 Internet 信息服务(IIS)身份验证机制的关系,以及抵御 Web 攻击的最佳编码实践。 【805】 17.1 威胁来自何方 安全性的概念意味着攻击者的存在,而我们要竭力抵御。表 17.1 对最常见的几种 Web 攻击做了总结。 表 17.1 常见的Web攻击 攻 击 说 明 跨站点脚本攻击 (Cross-site scripting,XSS) 恶意的用户输入随页面回发 第 17 章 ASP.NET 的 安 全性679 续表 攻 击 说 明 拒绝服务 (Denial of Service,DoS) 攻击者向网络中发送大量虚假请求,致使系统负担过重,造成网路阻塞 窃听(Eavesdropping) 由于未加密的网络数据包在网络中是透明的,因而攻击者可以通过窃听工具读取它们 隐藏字段篡改(Hidden-field tampering) 攻击者会篡改填充有敏感数据的未被检查的(受信任的)隐藏字段 单键攻击(One-click attack) 通过脚本发送恶意的HTTP 投递指令 会话劫持(Session hijacking)攻击者猜中或窃取有效的会话 ID,进而连接到另一个用户的会话 SQL 注入(SQL injection) 代码在不知情的情况下将攻击者插入的恶意输入连接成危险的 SQL 命令 从根本上讲,不论将用户向浏览器的标记中插入何种数据,都有可能遭受代码注入攻击(即,SQL 注入和XSS 的各种变体)。此外,敏...