【问题标题】:What's the approach to generate different AntiForgeryToken for each user为每个用户生成不同 AntiForgeryToken 的方法是什么
【发布时间】:2012-01-31 13:35:30
【问题描述】:

我正在使用带有 Razor 视图引擎的 MVC3。

我需要为每个用户生成不同的 AntiForgeryToken。

我正在考虑生成一个唯一的盐值,并在用户注册时将其存储在用户表中,并使用该盐生成令牌,但我如何才能将该盐值绕过属性ValidateAntiForgeryToken。我想我需要定义一个自定义属性,但我不知道该怎么做(访问用户信息以使用 salt 值)。

提前致谢。

【问题讨论】:

  • 你不是问了一个类似的问题吗?
  • 你没有真正解释为什么你不能只使用默认机制。
  • @MitchWheat 不,这是一个不同的问题,请仔细阅读,我问的是不同的事情。您可能会注意到,这不是我在 SO 上的第一天。
  • 我认为默认机制每个会话都有一个令牌。而且由于每个会话不应超过一个用户,我看不出问题。

标签: asp.net-mvc asp.net-mvc-3 security csrf


【解决方案1】:

如果您想要不同的盐,那么您需要从现有代码中推出自己的盐或提出新方案。

但是请记住,这些令牌已经是用户特定的。以用户 A 身份登录的某人无法使用来自用户 B 会话的令牌。

另请注意,它们不是一次性使用令牌,那么您要在这里阻止什么?让用户 A 不能为用户 b 生成一个?再次提醒 - 请记住,用户 a 未以用户 b 身份登录,因此如果这是伪造的,当前完成的检查将失败。

【讨论】:

    【解决方案2】:

    这是一个非常相似的问题,但有一个很好的解决方案:
    runtime loading of ValidateAntiForgeryToken Salt value

    基本上,您只需在运行时使用自定义盐值创建一个包装ValidateAntiForgeryToken 属性功能的属性。

    该解决方案的另一个优点:该属性可以在控制器级别应用,自动应用到所有 POST 方法。

    但是,正如其他人所说,MVC AntiForgeryToken 实现已经使用用户名来生成令牌,所以除非你别有用心,否则这样做不会给你任何好处。

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 2010-10-22
      • 2011-11-29
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多