利用ASP.NET的内置功能抵御Web攻击
作者:unknown 来源:anqn 添加时间:2006-5-26 13:20:05有意思的是,上面的三点分别针对的是 Web 安全性的三个不同方面,而这三个方面结合起来,才是唯一的一种生成防攻击、防篡改应用程序的合理方式。Web 安全性的各个层面可以总结如下:
• 编码实践:数据验证、类型和缓冲区长度检查,防篡改措施
• 数据访问策略:使用决策来保护可能最弱的帐户,使用存储过程或者至少是参数化的命令。
• 有效的存储和管理:不将关键性数据发送到客户端,使用哈希代码来检测操作,对用户进行身份验证并保护标识,应用严格的密码策略
如您所看到的,只有可以通过开发人员、架构师和管理员的共同努力,才可以产生安全的应用程序。请不要假定您能够以其他方式达到同样目的。
编写 ASP.NET 应用程序时,您并不是独自面对黑客大军:唯一的武器是通过自己的大脑、技能和手指键入的代码行。ASP.NET 1.1 和更高版本都会施加援手,它们具有一些特定的功能,可以自动提高防御以上列出的某些威胁的屏障。下面我们对它们进行详细的检视。
ViewStateUserKey
从 ASP.NET 1.1 开始引入,ViewStateUserKey 是 Page 类的一个字符串属性,只有很少数开发人员真正熟悉该属性。为什么呢?让我们看看文档中是怎么说的。
在与当前页相关联的视图状态变量中将一个标识符分配给单个用户
除了有些累赘,这个句子的意思相当清楚;但是,您能老老实实地告诉我,它说明了该属性原本的用途吗?要理解 ViewStateUserKey 的角色,您需要继续往下读,直到 Remarks 部分。
该属性有助于防止一次单击攻击,因为它提供了附加的输入以创建防止视图状态被篡改的哈希值。换句话说,ViewStateUserKey 使得黑客使用客户端视图状态的内容来准备针对站点的恶意张贴困难了许多。可以为该属性分配任何非空的字符串,但最好是会话 ID 或用户的 ID。为了更好地理解这个属性的重要性,下面我们简短介绍一下一次单击攻击的基本知识。
一次单击攻击包括将恶意的 HTTP 表单张贴到已知的、易受攻击的 Web 站点。之所以称为“一次单击”,是因为它通常是以受害者不经意的单击通过电子邮件发送的或者在拥挤的论坛中浏览时发现的诱惑性链接而开始的。通过点击该链接,用户无意中触发了一个远程进程,最终导致将恶意的 <form> 提交到一个站点。大家都坦白些吧:您真能告诉我,您从未因为好奇而单击过 Click here to win $1,000,000 这样的链接吗?显然,并没有什么糟糕的事情发生在您身上。让我们假定的确是这样的;您能说 Web 社区中的所有其他人都幸免于难了吗?谁知道呢。