我的MVC4 [ValidateAntiForgeryToken]
属性运行完美。但是,我不明白我在Fiddler看到的是什么。服务器发送到浏览器的cookie设置为此值:
__RequestVerificationToken=FVcmfj07ZEuBdjGuqWu14KIzolxr0ArLgvbNdnq0c4DFywxSA31yIHbm2IzgTPMVhMl4STEh2re8oGmwsSjKtSBTolCsmyGGRnLE1qurUqA1
但隐藏的表单输入设置为此值:
OxjO3NjS1ly-bqP9RnYK9Vx8ZJyLGVCuTQEuSCAQWofVmuJaRkEcnHAHWcDurXaH6DhUiZ6XY5wCgi70u19mPy9sydMrkuS9qlWMXxGL_401
即。它们在匹配的地方显得不同。我不能正确理解cookie,也许第一个字符串不是加密的cookie的实际“值”吗?
答案 0 :(得分:3)
来源Pro ASP.NET MVC 3 Framework:
__RequestVaerificationToken
隐藏字段包含一个随机组件(与cookie中的组件相匹配),但并非全部。如果用户已登录,则隐藏字段值还将包含其用户名(从HttpContext.User.Identity.Name
获取然后加密)。
[ValidateAntiForgeryToken]
检查这是否与登录用户匹配。这可以在不太可能出现的情况下增加保护,在这种情况下,攻击者可以以某种方式将您域上的cookie写入(但不会读取)到受害者的浏览器,并尝试重用为不同用户生成的令牌。