ViewStateUserKey 似乎是一个非常有用的功能,可以防止某些 CSRF 攻击。为什么在 asp.net 应用程序中默认不启用它?
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 + 共享主机 + ViewStateMac 验证失败
http://www.hanselman.com/blog/ViewStateUserKeyMakesViewStateMoreTamperresistant.aspx
http://msdn.microsoft.com/en-us/library/ms972969.aspx
经验总结。
如果您将此密钥用于任何未请求登录的页面,并且您只是在其他页面登录,这很容易在回发时创建视图状态错误并破坏页面和回发。所以你不能默认启用它 - 使用它的人必须知道我上面描述的这种情况。