在过去的几年里,我一直定期参加。NET安全方面的会议和用户组。参加这些会议的好处就是能够知道什么时候教别人新的东西。在会议过程中的某些时候,您可以看到一个或两个看起来很忧虑的观众。安全是一个讨论起来很困难的话题,通常,开发人员知道他们必须在开发生命周期中考虑安全因素,但却不知道必须寻找什么,而且可能因太胆小而不敢询问应用程序可能面临的潜在威胁和攻击。 本书很实用地介绍了进行ASP.NET安全开发的知识,而不是从理论的方向来解决安全问题。本书向您显示日常代码可能遭受攻击的示例和必须遵循的解决问题的步骤。 与大多数其他Wrox入门系列的书不同,本书不是创建一个应用程序,而是基于每个章节中Web站点可能需要执行的任务--接受输入、访问数据库、保密等。这种方法意味着当您在应用程序开发期间遇到问题时,可以孤立地阅读大部分章节。许多章节以一个在本章中讨论的特定任务清单来结束,而不是一个练习。在开发过程中可以作为一个提醒者来使用它们,还可以作为一个任务列表以确保您已经考虑和处理每一个潜在的错误或漏洞。 当决定想要在您的应用程序中测试这些漏洞时,确保是针对一个您的站点的开发安装来运行任何测试。如果您拥有一个中央开发服务器,那么必须确定已经通知服务器管理员您将要执行的安全性测试。永远不要在任何实时的应用程序的安装上运行测试,或者针对一个不受您控制的Web站点运行测试。 要知道,您的国家可能有关于加密的特有的法律,利用本书介绍的一些方法可能会受到限制,甚至是非法的,这取决于你住在哪里(所在国家)。 0.1 本书读者对象 本书针对那些已经扎实理解ASP.NET,但需要了解ASP.NET应用程序可能具有的潜在问题和共同的安全漏洞的开发人员。本书不是教您如何构建和开发一个ASP.NET Web站点,而是用来扩展您现有的知识,并提供对应用程序安全方面的理解和工具以确保您的应用程序不被攻击。 0.2 本书组织结构 本书分为3个部分,每部分包含了几个章节。 第1章大致地介绍了Web安全,演示了一个应用程序曾遭受的攻击并介绍了一些安全开发的普遍原则。 第Ⅰ部分:ASP.NET安全基础 第Ⅰ部分讨论了ASP.NET Web站点的日常常用功能(这些功能可能会暴露应用程序),以及如何保护这些功能。这部分包含了以下章节: ● 第2章解释了HTTP和ASP.NET Web表单工作原理的几个方面,并告诉您如何来检查请求和响应,并探讨了ASP.NET管道的工作原理。 ● 第3章讨论了到达应用程序的输入、如何利用输入来攻击您的应用程序,以及应该如何保护应用程序免遭攻击。 ● 第4章讨论了参数、查询字符串、表单域、事件和浏览器信息,以及如何安全地使用它们。 ● 第5章介绍信息是如何从应用程序中泄漏出去的和信息泄漏的危险性,以及如何锁定信息以防止发生意外时泄露出去。 ● 第6章深入探讨密码学的基础知识-- 显示了如何加密/解密数据和签名数据以防止数据被更改。 第Ⅱ部分:保护常见的ASP.NET任务 第Ⅱ部分关注应用程序的常见任务,这部分包含了以下章节: ● 第7章说明了如何在应用程序中添加用户名和密码。 ● 第8章演示了访问数据库时出现的问题,以及如何保护自己免遭此类的攻击。 ● 第9章讨论了文件系统,以及应用程序如何安全使用文件系统。 ● 第10章探讨了XML和如何验证XML,以及如何安全查询XML数据。 第Ⅲ部分:ASP.NET高级内容 第Ⅲ部分讨论更多不是所有应用程序都使用的高级主题,这部分包含了以下章节: ● 第11章介绍了Web服务和Web服务可能暴露的风险。 ● 第12章介绍了Rich Internet Applications(RIA),以及如何使用Ajax和Silverlight与服务器进行安全通信。 ● 第13章提供一些。NET运行时的安全基础,以及介绍了如何在ASP.NET内部使用代码访问安全性。 ● 第14章简要介绍了需要保护您的基础设施,使您能够理解如何把IIS作为防御第一线。 ● 第15章介绍了把第三方身份验证系统引入应用程序,并讨论基于声明的身份验证、OpenID和Windows Live ID。 ● 第16章介绍保护ASP.NET MVC应用程序以防止攻击的方式。 本书各章内容自包含,并且取得了一定的效果,可以不必按顺序阅读各章内容。在开发Web站点的过程中,您可以使用每章的说明来保护Web站点的各个部分。阅读后面几章内容时,需要参考前面几章的内容和解释,但这些已经在书中清楚标明。 0.3 使用本书所需的软件 本书在编写时使用。NET Framework 3.5和Visual Studio 2008,操作系统使用Windows Vista和Windows Server 2008。示例代码都基于。NET 3.5和。NET 3.5 SP1,所以为了运行这些代码您需要如下软件: ● Windows Vista或Windows Server 2008。 ● Visual Studio 2008。 大部分示例不需要付费的Visual Studio 2008版本,您可以使用Visual Studio Web Developer Express版本。 一些示例需要在Internet Information Server(IIS)下运行,一些示例需要安装SQL Server(使用SQL Server 2005,并且已经使用SQL Server Express进行测试)。 本书代码使用C#语言编写。 0.4 源代码 读者在阅读本书代码时,既可以亲自输入所有代码,也可以使用随书提供的代码文件。本书所有代码均可从网站下载。进入该网站后,请根据本书的书名查找本书(读者既可以使用搜索框进行查找,也可以使用书名列表进行查找),然后单击本书详细内容页面上提供的Download Code链接,就可以下载本书提供的所有代码。 下载完代码后,读者可以利用压缩工具将代码解压。此外,读者还可以通过访问网站/dynamic/books/download.aspx中提供的Wrox代码下载页面来获取本书提供的代码,也可以下载Wrox出版的其他书籍提供的代码。 0.5 勘误表 为了避免本书文字和代码中存在错误,我们已经竭尽全力。然而,人无完人,错误在所难免。如果读者在我们编写的书籍中发现了诸如拼写错误或代码缺陷等问题,那么请告诉我们,我们对此表示十分感谢。利用勘误表反馈错误信息,可以为其他读者节省大量时间,同时我们也能够受益于读者的建议,这有助于我们编写出质量更高的专业着作。 如果读者需要参考本书的勘误表,请在网站中通过搜索框或书名列表查找本书。然后在本书的详细内容页面上,单击Book Errata链接。在随后显示的页面中,读者可以看到与本书相关的所有勘误信息,这些信息是由读者提交,并由Wrox的编辑们加上的。通过访问/misc-pages/booklist.shtml,读者还可以看到由Wrox出版的其他所有书籍的勘误表。 如果在Book Errata页面上找到您发现的错误,那么请转到页面/ contact/techsupport.shtml,针对您发现的每一项错误填写表格,并将表格发给我们,我们将对表格内容进行认真审查,如果确实是我们书中的错误,那么我们将在该书的Book Errata页面上标明此错误信息,并在后续版本中改正相关错误。 0.6 关于 如果读者希望与作者进行讨论,或希望能够参与读者的共同讨论,那么请加入论坛。这个论坛是一个基于Web的系统,读者可以在论坛上发表与Wrox出版的书籍有关的技术信息,并与其他读者和技术用户进行讨论。论坛提供了订阅功能,可以将与读者所选主题相关的新帖子定期发送到读者的电子邮箱。Wrox的作者、编辑、业界专家以及其他读者都会参与论坛中的讨论。 读者可以在参与多个论坛的讨论,这些论坛不仅能够帮助读者更好地理解本书,还有助于读者更好地开发应用程序。如果读者希望加入论坛,那么请按照以下步骤执行操作: (1) 进入页面,单击Register链接。 (2) 阅读使用条款,然后单击Agree按钮。 (3) 填写必要的信息(必要时还需要填写可选信息),然后单击Submit按钮。 (4) 随后读者会收到一封电子邮件,邮件中说明了如何验证账号并完成整个加入过程。 成功加入论坛后,读者就可以发表新主题了。此外,读者还可以回复其他主题。读者在任何时间都可以阅读论坛信息。如果读者希望论坛将新的信息发送到自己的电子邮箱中,那么可以单击论坛列表中论坛名称旁的Subscribe to this Forum图标,完成该功能设置。 如果读者需要获得更多与Wrox P2P相关的信息,请阅读P2P FAQ,这样可以获得大量与P2P和Wrox所出版书籍相关的具体信息。阅读FAQ时,请单击P2P 页面上的FAQ链接。