代码之家  ›  专栏  ›  技术社区  ›  Arthurdent510

ASP.NET MVC AntiforgeryToken的验证问题

  •  1
  • Arthurdent510  · 技术社区  · 16 年前

    所以我有个有趣的问题…我需要先让我的webapp通过一个ibm应用扫描设备,然后才能将更改推送到生产环境中。我最新的更改包括ASP.NET MVC中的AntiforgeryToken。我测试过的每个浏览器都可以正常工作,没有问题。但是当设备尝试提交表单时,它会得到一个验证错误。查看验证令牌,设备正在对post上的表单值进行HTML编码,因此字符串不匹配…这就是它们的样子:

    cmiujrhizxlpvlu9zhkmtwdjihvq+n87csjzkixkf/blhaycpvitjhrcswwirpwg-从cookie中提取 cmiujrhizxlpvlu9zhkmtwdjihvq%2bn87csjzkixkf%2fblhaycpvitjhrcswwirpwg-表单值

    所以它正在将+转换为%2b和/转换为%2f…以前有人见过这个吗?这是客户端浏览器的问题吗?是否有反组织令牌生成一个没有特殊字符的字符串,以便我可以通过扫描获得我的应用程序?谢谢!

    1 回复  |  直到 13 年前
        1
  •  1
  •   Sailing Judo    16 年前

    查看MVC代码,它似乎使用RNGCryptoServiceProvider创建令牌。有趣的是,他们有一个方法可以替换对cookie名称不安全的字符(基本上是您在问题中指出的“+”和“/”,但它被标记为私有,我看不到它在哪里被使用。

    不幸的是,您不能从AntiforgeryData类派生自己的类,因为它是密封的。这很可悲,因为这是你问题的明显解决办法。

    您可以基于MVC代码创建一个新的属性,并自己使用安全方法。这将违反dry,但我看不到一个方法,因为微软密封了类。

    推荐文章