利用ASP.NET的内置功能抵御Web攻击
言之,您应当遵循这些指南,以避免被注入有害的SQL 代码:
• 使用尽可能少的权限运行,永远不以“sa”身份执行代码。 • 将访问限制给内置的存储过程。 • 首选使用 SQL 参数化查询。 • 不通过字符串串连来生成语句,不回显数据库错误。 返回页首 隐藏域 在传统的ASP 中,隐藏域是唯一一种在请求之间保持数据的方法。您需要在下一个请求中检索的任何数据都被打包到隐藏的<input> 域中,并执行回程。如果有人在客户端上修改了该域中存储的值,会怎样?只要文本是明文的,服务器端环境就无法测知这一情况。ASP.NET 中,页和各个控件的ViewState 属性有两个用途。一方面,ViewState 是跨请求保持状态的方法;另一方面,ViewState 使您能够在受保护的、不易篡改的隐藏域中存储自定义值。 如图 2 所示,视图状态被附加了一个哈希值,对于每条请求,都会检查该值,以检测是否发生了篡改。除少数几种情况外,没有任何理由要在 ASP.NET 中使用隐藏域。视图状态能够以安全得多的方式实现相同的功能。前面开门见山地讲到过,在明文的隐藏域中存储敏感的值(如价格或信用卡详细信息),相当于对黑客张开大门;视图状态甚至能够使这种不好的做法比以前更为安全,因为视图状态具有数据保护机制。但是,请牢记,视图状态可以防止篡改,但是并不能保证保密性,除非使用加密 — 存储在视图状态中的信用卡详细信息无论如何都有风险。 在 ASP.NET 中,哪些情况下使用隐藏域是可接受的?当您生成需要将数据发送回服务器的自定义控件时。例如,假定您要创建一个支持重派列顺序的新 DataGrid 控件。您需要在回发中将新的顺序发送回服务器。如果不将这些信息存储到隐藏域中,又可以存储到哪里? 如果隐藏域为读/写域,即预期客户端会写入它,没什么办法能够完全制止黑客攻击。您可以尝试哈希或者加密该文本,但这并不能让您合理地确信不会遭受黑客攻击。此时,最好的防御就是让隐藏域包含惰性和无害的信息。 此外,应当注意 ASP.NET 公开了一个鲜为人知的类,可用于编码和哈希任何序列化的对象.该类为 LosFormatter,ViewState 实现用于创建回程到客户端的编码文本正是同一个类。
前面的代码片段演示了如何使用 LosFormatter 来创建类似视图状态的内容,对其编码并进行哈希。 电子邮件和垃圾邮件 在本文结尾,请让我指出,最常见的攻击中至少有两种(经典的XSS 和一次单击)通常是通过诱使不抱怀疑的受害者单击诱惑性和欺骗性的链接来发起的。很多时候我们都可以在自己的收件箱中发现这样的链接,虽然有反垃圾邮件过滤器。几美元就可以买到大量电子邮件地址。用来生成这种列表的其中一种主要的技巧就是扫描 Web 站点上的公共页,查找并获取所有看上去像电子邮件的内容。 如果页上显示了电子邮件地址,很可能或早或晚这个地址都会被自动 Web 程序捕获。真的吗?当然,这要看该电子邮件是如何显示的。如果硬编码它,您输定了。如果采用其他表示形式(如 dino-at-microsoft-dot-com),是否能够骗过自动 Web 程序不太清楚,但能让所有阅读您的页并想建立合法联系的人光火,倒是一定的。 总体说来,您应当确定一种方法,将电子邮件动态地生成为 mailto 链接。Marco Bellinaso 编写的一个免费组件恰好可以完成这项工作。您可以从 DotNet2TheMax Web 站点获得该组件的全部源代码。 小结 有人怀疑 Web 可能是所有运行时环境中敌意最盛的吗?根源在于谁都可以访问 Web 站点,并尝试向它传递好的或坏的数据。但是, |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |