2010-01-07 45 views
1

所以我有一个有趣的问题...我需要让我的Web应用程序通过IBM应用程序扫描设备,然后才能将更改推送到生产。我最近的更改包括ASP.NET MVC中的AntiForgeryToken。我测试过的每个浏览器都能正常工作,没有问题。但是,当设备尝试提交表单时,会出现验证错误。纵观验证令牌,该设备是做对的帖子形式值的HTML编码,因此字符串不匹配起来......这是他们的样子:验证问题与ASP.NET MVC AntiForgeryToken

cmiuJRHizXLPvlu9zHKmTwdJiHvq + n87CSJZkixkf/BLHayCPVITJhRCsWWirPWg - 拉升从cookie cmiuJRHizXLPvlu9zHKmTwdJiHvq%2Bn87CSJZkixkf%2FBLHayCPVITJhRCsWWirPWg - 形式值

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

回答

1

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

不幸的是,你不能从AntiForgeryData类派生自己的类,因为它是密封的。这很令人伤心,因为这是你的问题的明显解决方案。

您可以根据MVC代码创建一个新的属性,并自己使用安全方法。它会违反DRY,但自从微软封闭课程后,我没有看到任何解决办法。

+0

微软在MVC框架中封了很多类,可能不应该这样做。我总觉得这很奇怪。 – 2010-01-07 19:24:33

+0

我很想留下它...我还没有一个真正的浏览器有这个问题,但我的猜测是ibm设备正在做一些非标准的傻事。 – Arthurdent510 2010-01-07 19:32:45