我正在使用带有Razor视图引擎的MVC3。
我需要为每个用户生成不同的AntiForgeryToken。
我正在考虑生成一个唯一的salt值,并在用户注册时将其存储在users表中,并使用该salt生成令牌,但是如何将该salt值绕过属性ValidateAntiForgeryToken
。我想我需要定义一个自定义属性,但我不知道该怎么做(通过访问用户信息来使用salt值)。
提前致谢。
答案 0 :(得分:5)
如果你想要一种不同的盐,那么你需要从现有的代码中推出自己的代码或者想出一个新的方案。
但请记住,这些令牌已经是用户特定的。以用户A身份登录的用户无法使用用户B会话中的令牌。
另请注意,他们不是一次使用令牌,所以你想在这里阻止什么?这样,用户A无法为用户b生成一个?再次 - 请记住,用户a未以用户b身份登录,因此如果伪造,则当前完成的检查将失败。
答案 1 :(得分:1)
这是一个非常相似的问题,有一个很好的解决方案:
runtime loading of ValidateAntiForgeryToken Salt value
基本上,您只需要在运行时使用自定义salt值创建包含ValidateAntiForgeryToken
属性功能的属性。
该解决方案中的另一个好处:属性可以在Controller级别应用,自动应用于所有POST方法。
然而,正如其他人所说,MVC AntiForgeryToken实现已经使用用户名来生成令牌,所以除非你有别有用心,否则这样做不会给你带来任何好处。