为什么默认情况下不启用ViewStateUserKey

时间:2012-08-30 17:16:55

标签: asp.net

ViewStateUserKey似乎是一个非常有用的功能,可以防止一些CSRF攻击。为什么在asp.net应用程序中默认没有启用它?

1 个答案:

答案 0 :(得分:1)

我说一些想法:

ViewStateUserKey可能会破坏有效用户中的视图状态,因此有效用户会看到错误。因此最好让它出来,只有高级程序员才能使用它,并知道为什么视图状态会中断并在可能的情况下处理它。

让我们举一些例子。

如果按原样使用它:

void Page_Init (Object sender, EventArgs e)
{ 
   if (User.Identity.IsAuthenticated)
      ViewStateUserKey = User.Identity.Name;
}

并查看此步骤。

  • 有效登录用户在页面上查看不需要的GridView 日志记录。
  • 此用户已离开页面一段时间,并且日志记录为 已过期
  • 现在尝试分页gridview,并获得viewstate break

为什么,因为是使用ViewStateUserKey启动页面,但是在过期之后ViewStateUserKey现在不同(因为用户现在没有登录,因此为null)并打破视图状态并且同时这个页面不需要登录的时间,也不会重新发送请求再次登录。

通过这个简单的例子,这确实发生在我身上,我说这个参数可以打破视图状态,如果这个默认设置可能会导致一些类似的问题。

相对: ViewStateUserKey + shared hosting + ViewStateMac validation failure

http://www.hanselman.com/blog/ViewStateUserKeyMakesViewStateMoreTamperresistant.aspx

http://msdn.microsoft.com/en-us/library/ms972969.aspx

经验结论。

如果您对任何非请求登录的页面使用此密钥,并且您只是在其他页面登录,则可以轻松地在回发后创建视图状态错误并中断页面和回发。因此,默认情况下不能启用它 - 使用它的人必须知道我在上面描述的这种情况。

相关问题