利用ASP.NET的内置功能抵御Web攻击
隐藏域
在传统的 ASP 中,隐藏域是唯一一种在请求之间保持数据的方法。您需要在下一个请求中检索的任何数据都被打包到隐藏的 <input> 域中,并执行回程。如果有人在客户端上修改了该域中存储的值,会怎样?只要文本是明文的,服务器端环境就无法测知这一情况。ASP.NET 中,页和各个控件的 ViewState 属性有两个用途。一方面,ViewState 是跨请求保持状态的方法;另一方面,ViewState 使您能够在受保护的、不易篡改的隐藏域中存储自定义值。
如图 2 所示,视图状态被附加了一个哈希值,对于每条请求,都会检查该值,以检测是否发生了篡改。除少数几种情况外,没有任何理由要在 ASP.NET 中使用隐藏域。视图状态能够以安全得多的方式实现相同的功能。前面开门见山地讲到过,在明文的隐藏域中存储敏感的值(如价格或信用卡详细信息),相当于对黑客张开大门;视图状态甚至能够使这种不好的做法比以前更为安全,因为视图状态具有数据保护机制。但是,请牢记,视图状态可以防止篡改,但是并不能保证保密性,除非使用加密 — 存储在视图状态中的信用卡详细信息无论如何都有风险。
在 ASP.NET 中,哪些情况下使用隐藏域是可接受的?当您生成需要将数据发送回服务器的自定义控件时。例如,假定您要创建一个支持重派列顺序的新 DataGrid 控件。您需要在回发中将新的顺序发送回服务器。如果不将这些信息存储到隐藏域中,又可以存储到哪里?
如果隐藏域为读/写域,即预期客户端会写入它,没什么办法能够完全制止黑客攻击。您可以尝试哈希或者加密该文本,但这并不能让您合理地确信不会遭受黑客攻击。此时,最好的防御就是让隐藏域包含惰性和无害的信息。
此外,应当注意 ASP.NET 公开了一个鲜为人知的类,可用于编码和哈希任何序列化的对象.该类为 LosFormatter,ViewState 实现用于创建回程到客户端的编码文本正是同一个类。
private string EncodeText(string text) {
StringWriter writer = new StringWriter();
LosFormatter formatter = new LosFormatter();
formatter.Serialize(writer, text);
return writer.ToString();
}
前面的代码片段演示了如何使用 LosFormatter 来创建类似视图状态的内容,对其编码并进行哈希。
电子邮件和垃圾邮件
在本文结尾,请让我指出,最常见的攻击中至少有两种(经典的 XSS 和一次单击)通常是通过诱使不抱怀疑的受害者单击诱惑性和欺骗性的链接来发起的。很多时候我们都可以在自己的收件箱中发现这样的链接,虽然有反垃圾邮件过滤器。几美元就可以买到大量电子邮件地址。用来生成这种列表的其中一种主要的技巧就是扫描 Web 站点上的公共页,查找并获取所有看上去像电子邮件的内容。
如果页上显示了电子邮件地址,很可能或早或晚这个地址都会被自动 Web 程序捕获。真的吗?当然,这要看该电子邮件是如何显示的。如果硬编码它,您输定了。如果采用其他表示形式(如 dino-at-microsoft-dot-com),是否能够骗过自动 Web 程序不太清楚,但能让所有阅读您的页并想建立合法联系的人光火,倒是一定的。
总体说来,您应当确定一种方法,将电子邮件动态地生成为 mailto 链接。Marco Bellinaso 编写的一个免费组件恰好可以完成这项工作。您可以从 DotNet2TheMax Web 站点获得该组件的全部源代码。
小结
有人怀疑 Web 可能是所有运行时环境中敌意最盛的吗?根源在于谁都可以访问 Web 站点,并尝试向它传递好的或坏的数据。但是,创建不接受用户输入的 Web 应用程序,又有什么意义呢?
我们还是直面现实吧:无论您的防火墙如何强大,无论您如何频繁地应用可用的修补程序,只要您运行的 Web 应用程序先天包含缺陷,攻击者迟早都可以通过主通道,也就是端口 80,直接进入您的系统的最核心部分。
ASP.NET 应用程序与其他 Web 应用程序相较,既不更易受攻击,也不更安全。安全性和漏洞同样根植于编码实践、实际经验和团队合作。如果网络不安全,那么任何应用程序都不安全;类似地,无论网络如何安全,管理如何精良,如果应用程序存在缺陷,攻击者总是能够得手。
ASP.NET 的好处是提供了一些好的工具,只需少量工作,就可以将安全标准提升到可以接受的级别。当然,这并不是 足够高的级别。不应纯粹以来 ASP.NET 的内置解决方案,同样也不应忽视它们。尽可能多地了解常见的攻击。
本文提供了内置功能的带注释的列表,以及一些有关攻击与防御的背景知识。用来检测传出的攻击的技巧是另一回事,可能需要一篇专门的文章来进行介绍。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



