所以我遇到了一个有趣的问题......在我将更改投入生产之前,我需要让我的webapp通过IBM应用扫描设备。我的最新更改包括ASP.NET MVC中的AntiForgeryToken。我测试过的每个浏览器都运行得很好,没问题。但是,当设备尝试提交表单时,会收到验证错误。查看验证令牌,设备正在对帖子上的表单值进行html编码,因此字符串不匹配......这就是它们的样子:
cmiuJRHizXLPvlu9zHKmTwdJiHvq + n87CSJZkixkf / BLHayCPVITJhRCsWWirPWg - 从cookie中取出 cmiuJRHizXLPvlu9zHKmTwdJiHvq%2Bn87CSJZkixkf%2FBLHayCPVITJhRCsWWirPWg - 表格值
所以它正在翻译+到%2B和/到%2F ......有没有人见过这个?这是客户端浏览器的问题吗?是否有AntiForgeryToken生成一个没有特殊字符的字符串,所以我可以通过此扫描获取我的应用程序?谢谢!
答案 0 :(得分:1)
查看MVC代码,看来它使用RNGCryptoServiceProvider来创建令牌。有趣的是,他们有一种方法可以替换对cookie名称不安全的字符(基本上是你在问题中指出的“+”和“/”),但它被标记为私有,我看不到它在哪里使用。
很遗憾,您无法从AntiForgeryData类派生自己的类,因为它是密封的。这非常令人难过,因为这是你问题的明显解决方案。
您可以根据MVC代码创建一个新属性,并自己使用安全方法。它会违反DRY,但自从微软封锁了这个类以来,我没有看到解决方法。