1

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

cmiuJRHizXLPvlu9zHKmTwdJiHvq+n87CSJZkixkf/BLHayCPVITJhRCsWWirPWg - 从 cookie 中提取 cmiuJRHizXLPvlu9zHKmTwdJiHvq%2Bn87CSJZkixkf%2FBLHayCPVITJhRCsWWirPWg - 表单值

所以它正在将 + 转换为 %2B 和 / 转换为 %2F ...以前有人见过吗?这是客户端浏览器的问题吗?是否有 AntiForgeryToken 生成一个没有特殊字符的字符串,以便我可以通过此扫描获取我的应用程序?谢谢!

4

1 回答 1

1

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

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

您可以根据 MVC 代码创建一个新属性并自己使用安全方法。它会违反 DRY,但我看不到解决方法,因为 Microsoft 密封了课程。

于 2010-01-07T19:21:20.667 回答