AntiForgeryToken用于防止CSRF攻击,但是MSDN上的链接并没有让我深入了解AntiForgeryToken究竟做了什么,或者它是如何工作的,或者为什么事情都按照它们的方式完成。
从我收集的内容中,它在网页和cookie中创建了一个哈希。其中一个或两个使用散列IPrincipal.Name
,并使用对称加密。
任何人都可以解释:
答案 0 :(得分:1)
好的,这是我最好的拍摄。
1)在内部,mvc使用RNG加密方法创建一个128位字符串作为XSRF令牌。此字符串存储在cookie中以及表单上某处的隐藏字段中。 cookie名称似乎是__RequestVerificationToken +应用程序路径(服务器端)的基本64编码版本的形式。其中的html部分使用AntiForgeryDataSerializer来序列化以下数据 - 盐 - 值(标记字符串) - 创建日期的刻度 - 用户名(看起来像Context.User)
validate方法基本上反序列化了cookie和表单中的值,并根据值(salt / value / ticks / username)对它们进行比较。
2/3)我认为这个讨论更多的是关于何时使用XSRF令牌以及何时不使用XSRF令牌。在我看来,你应该在每个表格上使用它(我的意思是为什么不)。我唯一可以想到的是,如果您确实遇到了问题,那么这是不能保护的。知道应用名称的base64编码将允许攻击者能够在XSRF攻击期间查看cookie。也许我对此的解释是不正确的。
4)不确定你到底在找什么?我想我会建立一种机制,我会尝试在会话中存储XSRF令牌(如果已经可用),如果没有,那么尝试cookie方法。至于使用的加密类型,我发现了这个SO artcile。 Pros and cons of RNGCryptoServiceProvider