5

AntiForgeryToken 用于防止 CSRF 攻击,但是 MSDN 上的链接并没有让我深入了解 AntiForgeryToken 究竟是做什么的,或者它是如何工作的,或者为什么事情会以它们的方式完成。

据我所知,它在网页和 cookie 中创建了一个哈希。它们中的一个或两个都使用 hashed IPrincipal.Name,并使用对称加密。

任何人都可以阐明:

  1. AntiForgeryToken 如何在内部工作
  2. 它应该用来保护什么
  3. 它不应该用来保护什么
  4. 上述#1 的实施选择背后的原因是什么?
    • 例子:
      • 实施是否不受“DoubleSubmit”cookie 和其他常见漏洞的影响
      • 如果用户打开多个选项卡,是否存在实施问题
      • 是什么让 MSFT 的实施与 SANS 的实施不同
4

1 回答 1

1

好吧,这是我最好的镜头。

1) 在内部,mvc 使用 RNG 加密方法来创建一个 128 位的字符串来充当 XSRF 令牌。该字符串存储在 cookie 中以及表单某处的隐藏字段中。cookie 名称似乎采用 __RequestVerificationToken + 应用程序路径(服务器端)的 base 64 编码版本的形式。这其中的 html 部分使用 AntiForgeryDataSerializer 来序列化以下数据片段 - 盐 - 值(令牌字符串) - 创建日期的刻度 - 用户名(看起来像 Context.User)

validate 方法基本上将 cookie 和表单中的值反序列化,并根据值(salt/value/ticks/username)比较它们。

2/3)我认为这个讨论更多的是关于何时使用 XSRF 令牌以及何时不使用。在我看来,您应该在每种形式上都使用它(我的意思是为什么不这样做)。我能想到的唯一不能保护的是你是否真的点击了有问题的表格。知道应用名称的 base64 编码将使攻击者能够在 XSRF 攻击期间查看 cookie。也许我对此的解释是不正确的。

4) 不确定您在这里寻找什么?我想我会建立一种机制,尝试将 XSRF 令牌存储在会话中(如果已经可用),如果没有,则尝试使用 cookie 方法。至于使用的加密类型,我发现了这个 SO artcile。 RNGCryptoServiceProvider 的优缺点

于 2011-03-28T16:04:39.817 回答