Asp.net mvc ValidateAntiForgeryToken为会话呈现cookie值

Asp.net mvc ValidateAntiForgeryToken为会话呈现cookie值,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我不确定这是MVC框架上的一个“特性”还是一个bug 在使用[ValidateAntiForgeryToken]属性执行一些操作时,我注意到,尽管在视图中,\u RequestVerificationToken隐藏文本字段会随着页面的每次重新加载而改变,但cookie\u RequestVerificationToken\u Lw在会话长度上始终保持不变,即,所有视图将使用相同的cookie值进行比较 据我所知,视图上的值是不同的,因为它每次都被加密,但实际上,就像cookie一样,它在会话长度

我不确定这是MVC框架上的一个“特性”还是一个bug

在使用[ValidateAntiForgeryToken]属性执行一些操作时,我注意到,尽管在视图中,\u RequestVerificationToken隐藏文本字段会随着页面的每次重新加载而改变,但cookie\u RequestVerificationToken\u Lw在会话长度上始终保持不变,即,所有视图将使用相同的cookie值进行比较

据我所知,视图上的值是不同的,因为它每次都被加密,但实际上,就像cookie一样,它在会话长度上也与cookie相同

我的问题是。我们不应该强制这个cookie对每个不同的请求都有不同的值吗

我本以为在会话期间保持相同的cookie值是一种安全风险,因为恶意黑客可能会抓住它,而我们的CSRF(跨站点请求伪造)预防措施将无法实施


有没有办法强制此cookie为每个请求获取不同的值?

该cookie仍然是三管齐下保护的一部分

他们一定有

  • 饼干
  • 您的登录名(因此您的表单验证cookie)
  • 页面中的防伪令牌
    考虑到这一点,并使用ssl(您应该一直使用!),鉴于令牌不是一次性使用令牌,您的保护级别可能不会改变。

    我正在使用ssl,并且我的cookie都设置为secure=true,但我发现,正如我上面提到的,如果恶意黑客抓住我的cookie,我所有阻止CSRF攻击的预防措施都变得毫无用处。我认为每个请求有一个不同的cookie值会使它更安全,即使每次都是不同的cookie。不,它们不是(仅仅通过拥有cookie就变得无用)。他们仍然需要以您的身份登录(这意味着如果使用forms auth,也会窃取cookie),并且他们还需要您的表单令牌。如果他们得到了您的cookie,这是一个仅http的cookie,那么他们可能会嗅探到会话,在这种情况下,您的表单令牌也会被嗅探到。如果他们得到一个,很可能得到另一个。随每个请求更改的表单标记不是一次性使用标记。不幸的是,它们也可以重播。