我们正在使用带有实体框架的C#MVC和实现OWIN的自定义身份验证,以便通过自定义用户数据库进行身份验证。 用户通过标准登录表单通过用户名和密码登录并验证自己。
为了适应常见的安全问题OWIN在每次登录和注销时重新生成“.AspNet.ApplicationCookie”,我还强制“SessionIDManager”在每次身份验证更改时重新生成一个新的会话ID(保存在.AspNet.ApplicationCookie中)。 / p>
我们使用QUALYS来测试应用程序众所周知的攻击场景,例如XSS,会话劫持等。一项重要的技术是发布和验证Antiforgey Token,它将被放置在表单字段内并存储在客户端的cookie中。据我所知,这些不必匹配,因为它们是加密的,并在POST请求的服务器端解密后得到验证(使用ValidateAntiForgeryToken属性)。
如上所述,我们使用QUALYS来涵盖可能的漏洞场景。该报告提到了“__RequestVerifiationToken”的安全问题,该问题在cookie中设置,并且在时间失效之前不会重新生成。我通过跟踪Fiddler的流量来重现这一点。
所以Token在那里,得到验证,我可以登录,注销,chagne密码等等。
我的问题是,是否有可能为cookie重新发出__RequestVerifiationToken? 使用HtmlHelper @ Html.AntiForgeryToken()时,它会在每次重新加载时为隐藏的表单字段重新创建一个新标记,但cookie值会随着时间的推移保持不变。我还需要重新创建cookie __RequestVerifiationToken值,至少在登录/注销操作时。
一个侧面的问题是,当我操作隐藏的表单字段内容时,为什么Internet Explorer(Edge)请求会导致长时间请求,而firefox则会收到AntiForgery Erros发生的错误?