1、 无无懈懈可可击击全全方方位位构构建建 安安全全 WWe eb b 系系统统 杨 云 编著 清 华 大 学 出 版 社 北 京 内 容 简 介 本书对常见的 Web 安全问题,依照分类的方式讲解每一个知识点,告诉读者如何开发安全高效的Web 系统,如何使自己的系统免受黑客的攻击。本书内容是作者多年项目实施和管理经验的总结,在此基础上加以提炼,试图用最简明易懂的方式介绍网站开发的安全问题以及应对措施;内容涉及界面 UI 安全、代码安全、中间件安全、Session 安全等,并用典型实例作为引导,介绍各种安全类库和安全编程。本书适合网站开发人员、应用程序设计和开发人员使用,也适合网站系统的管理维护人
2、员阅读和 参考。本书封面贴有清华大学出版社防伪标签,无标签者不得销售。版权所有,侵权必究。侵权举报电话:010-62782989 13701121933 图书在版编目(CIP)数据 Linux 系统管理与网络管理/余柏山等编著.北京:清华大学出版社,2010.1(Linux 典藏大系)ISBN 978-7-302-20714-6 .L .余 .Linux 操作系统 .TP316.89 中国版本图书馆 CIP 数据核字(2009)第 139547 号 责任编辑:袁金敏 赵晓宁 责任校对:徐俊伟 责任印制:出版发行:清华大学出版社 地 址:北京清华大学学研大厦 A 座 http:/ 邮 编:100
3、084 社 总 机:010-62770175 邮 购:010-62786544 投稿与读者服务:010-62795954, 质量反馈:010-62772015, 印 刷 者:装 订 者:肖 米 经 销:全国新华书店 开 本:185260 印 张:19.25 字 数:481 千字 版 次:2011 年 12 月第 1 版 印 次:2011 年 12 月第 1 次印刷 印 数:15000 定 价:25.00 元 产品编号:043911-01 前 言 在互联网中遨游,最让人担心的 3 个头等问题,您知道都是哪些吗?好吧,我来告诉你,它们是:安全!安全!还是安全!互联网每天都在上演着失去用户信任和安全
4、感,从而倒闭的悲剧。作为开发人员的你,是否为总结安全点而苦恼,为不知道如何加固功能点而纠结?那么如何才能设计出高安全度的网络系统呢?这个问题已经关系到用户对网站系统的信任程度,关系到企业和系统的生死存亡了。在笔者看来,最关键的就是设计思想和每个功能点的完善性。时下在网站系统中使用最广泛的就是 ASP.NET 和 Java 架构了。其中.NET 框架是微软公司为了满足广大用户的需求而开发的一种通用平台。Java 技术由于没有公司做统一的文档编写,导致设计安全模块完全需要工程师自己的经验。这些技术在帮助我们方便、快捷地完成网站开发的同时,在实际运行环境中的黑客入侵和安全隐患也成了不容忽视的问题,这
5、就要求开发人员从设计和开发两方面都要关注系统的安全性。在很多人的印象中,安全工作似乎都是在问题发生后才采取措施。本书旨在从根本上纠正了这一做法,通过对.NETJava 平台安全问题的了解,做到风险早避免,问题早处理,在应用程序开发的全生命周期中严把安全关,保证系统的正常、稳定运行。1本书介绍 本书可以分为 4 部分。第一部分为第 1第 3 章,介绍了应用安全的基本概念和安全控件;第二部分为第 4第 6 章,讨论了如何进行数据加密和验证;第三部分为第 7第12 章,阐述了如何使用与程序运行平台有关的安全功能,包括组件安全、会话安全、代码信任和网站钓鱼技术的防与治;第四部分为第 1315 章,重点
6、介绍了服务器上如何安全的部署你的程序,以及代码的安全测试和审核。2本书特点 本书最大的特点就是教读者对症下药,根据不同的功能点或功能模块传授不同的代码安全防范和设计策略。书中采用时下最新的 ASP.NET 4.0 技术为范本,讲解如何将安全代码和防范技术植入系统。通过图文并茂的方式把复杂的问题简单化,让大家知道应该如何 去做。另外,书中选用的代码和实例都是被验证过的,能够切实提升安全的有效方法。使得读者在短期掌握别人长期才能总结出来的技术和经验,尤其对专业人员和学生的帮助很大。本书在设计方式和方法上不受技术的限制,如果抛开技术本身,单说设计方法该书所讲解的方法将使读者能够“依葫芦画瓢”。本书所
7、涉及的网站安全问题仅限于学习研究,若读者据此攻击他人网站,责任自负。前言 II 3本书适用人员 本书适合每一位网站开发人员阅读,作为应用程序的设计和开发人员,他们应该了解所用语言安全性特点和局限性,以便在设计和编码过程中进行安全性相关考虑。在本书的每一章节,都运用大量实例,帮助开发人员学习安全服务配置和代码编写。另外,作为应用系统的管理维护人员和用户也应该阅读本书。通过本书,读者可以清晰地分辨哪些行为是危险的,而这些行为是我们每天都会遇到的。以最常见的数据加密和身份验证为例,了解.NET 平台安全运行的机制,就可以减少在系统操作过程中的低级错误,避免安全隐患。4致谢 本书主要由杨云编写,参加编
8、写的还有李广平、王春中、冉剑、陈代勇、陈佳佳、陈家云、王磊、王宇晟、胡浩、蔡芳、刘扬、陈雪郊、谢晓锋、王毅、刘小鹿、胡建、杜华富、成梅花。本书在编写过程中,得到清华大学出版社编辑袁金敏老师的指导和帮助,在此表示感谢。另外,感谢读者和我家人一直以来对我的支持和帮助。由于水平有限,书中难免存在不足之处,欢迎广大读者批评指正。编 者 2011 年 5 月 目 录 第一部分 第 1 章 网站安全技术概述.2 1.1 代码安全性的含义.2 1.1.1 代码与代码的安全域.4 1.1.2 代码的安全策略.9 1.2 可靠的安全架构.13 第 2 章 类库与安全类.17 2.1 安全类的总体架构.17 2.
9、2 System.Security.18 2.3 System.Security.Cryptography.19 2.4 System.Security.Principal.21 2.5 System.Security.Policy.22 2.6 System.Security.Permissions.25 2.7 System.Web.Security.27 2.8 JSP 的安全类.29 第 3 章 ASP.NET 4.0 的安全组件.31 3.1 登录控件.31 3.2 登录状态控件.32 3.3 密码维护控件.34 3.4 创建用户向导控件.36 3.5 页面访问控件.38 第二部分
10、第 4 章 存储的安全.42 4.1 对数据的攻击方式.42 4.2 Hash 算法.42 4.3 利用操作系统的接口加密.47 4.4 加密 XML 文件.52 4.4.1 DpapiProtectedConfigurationProvider 类.54 4.4.2 RsaProtectedConfigurationProvider 类.57 4.5 保护视图数据.60 目录 IV 4.5.1 开启视图保护开关.61 4.5.2 加密视图信息.64 4.5.3 用户独立视图.65 4.6 数据保护.67 4.6.1 对称加密算法.67 4.6.2 非对称加密算法.70 4.6.3 证书加密.
11、72 第 5 章 让 ASP.NET/JSP 与数据库安全通信.77 5.1 数据库与注入隐患.77 5.1.1 攻击原理.78 5.1.2 攻击方式.78 5.1.3 防范方法.79 5.2 一个注入实例.80 5.3 加固 SQL 参数与存储过程.86 5.4 正确连接数据库.87 5.4.1 数据库身份验证.89 5.4.2 数据库授权.90 5.4.3 数据库安全配置.91 5.4.4 加密敏感数据.92 5.4.5 安全处理出错数据.95 5.4.6 正确安装数据库.97 第 6 章 把住用户输入关.100 6.1 需要验证的数据.100 6.2 几种常见验证方案.105 6.2.1
12、 图片和附加码数据验证.105 6.2.2 Web 表单数据验证.108 6.2.3 Web 窗体数据验证.108 6.3 信息过滤.116 第三部分 第 7 章 编写安全中间件.122 7.1 脆弱的中间件.122 7.2 如何设计中间件.124 7.3 设计中间件的权限.125 7.4 一个中间件的实例.127 7.5 强签名与反编译.130 7.6 如何操作存储系统.132 第 8 章 ASP.NET 角色机制.140 8.1 ASP.NET 安全管道.140 目录 V8.1.1 HTTP 请求处理流程.141 8.1.2 安全 HTTP 管道.142 8.1.3 过滤器.146 8.2
13、 角色安全认证.148 8.2.1 IIS 和 ASP.NET 用户认证流程.148 8.2.2 ASP.NET 用户认证.148 8.2.3 使用 ASP.NET 管理工具添加用户.152 8.2.4 角色管理系统.154 8.2.5 使用 Membership/Role API 添加用户.159 8.3 窗体验证.165 8.4 混合认证.169 8.4.1 基于 IIS 的 Windows 身份验证.169 8.4.2 基于活动目录的 Windows 身份验证.173 第 9 章 构建可靠 Session.180 9.1 Session 的概念.180 9.2 安全 Session 的运
14、行时.183 9.3 如何创建 Session.185 9.4 利用加密连接加固 Session.186 9.5 使用权标.188 9.6 合理配置 Session.190 9.7 正确处理链接.191 9.8 利用数据库保存 Session.193 第 10 章 安全的 Provider 模式.196 10.1 ASP.NET 的 MemberShip Provider.196 10.2 实现自定义的 MembershipProvider 类.199 10.3 安全使用 SiteMap.204 第 11 章 保护错误信息.208 11.1 安全处理 ASP.NET 系统错误.208 11.1
15、.1 错误异常处理机制.208 11.1.2 错误异常组成.208 11.2 异常处理程序的设计.209 11.2.1 错误异常的引发.209 11.2.2 错误异常的处理.215 11.2.3 错误异常的捕获.217 11.2.4 设计自定义错误异常.219 11.2.5 错误异常的性能.219 11.2.6 显示安全的错误信息.221 11.3 监控自己系统的安全状态.222 11.3.1 Web 系统安全监控.223 11.3.2 记录错误信息.224 目录 VI 11.3.3 日志组件.227 第 12 章 Web 系统与钓鱼技术.232 12.1 反射型 XSS 漏洞.232 12.
16、2 保存型 XSS 漏洞.234 12.3 重定向漏洞.235 12.4 本站点请求漏洞.236 第四部分 第 13 章 程序间的访问策略.240 13.1 代码信任技术概述.240 13.2 资源访问安全.240 13.3 完全信任和部分信任.241 13.4 代码访问安全配置.242 13.5 ASP.NET 策略文件.243 13.6 ASP.NET 安全策略.243 13.7 开发部分信任 Web 应用程序.246 13.8 部分信任级的配置方法.247 13.9 部分信任的 Web 应用程序处理策略.247 13.10 自定义策略.248 13.11 沙箱保护策略.249 13.12 中度信任程序.250 13.13 中度信任的限制.251 第 14 章 正确加固 IIS.254 14.1 配置安全的操作系统.254 14.2 安全配置 IIS.257 14.3 使用 IIS.260 14.4 IIS 安全设置.262 14.4.1 角色设置.263 14.4.2 页面和控件设置.265 14.4.3 监控 Web 系统安全.269 14.4.4 安全密钥配置.273 14.