ViewStateUserKey似乎是一个非常有用的功能,可以防止一些CSRF攻击。为什么在asp.net应用程序中默认没有启用它?
答案 0 :(得分:1)
我说一些想法:
ViewStateUserKey
可能会破坏有效用户中的视图状态,因此有效用户会看到错误。因此最好让它出来,只有高级程序员才能使用它,并知道为什么视图状态会中断并在可能的情况下处理它。
让我们举一些例子。
如果按原样使用它:
void Page_Init (Object sender, EventArgs e)
{
if (User.Identity.IsAuthenticated)
ViewStateUserKey = User.Identity.Name;
}
并查看此步骤。
为什么,因为是使用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
如果您对任何非请求登录的页面使用此密钥,并且您只是在其他页面登录,则可以轻松地在回发后创建视图状态错误并中断页面和回发。因此,默认情况下不能启用它 - 使用它的人必须知道我在上面描述的这种情况。