【问题标题】:Validation issue with ASP.NET MVC AntiForgeryTokenASP.NET MVC AntiForgeryToken 的验证问题
【发布时间】:2011-01-02 15:10:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net asp.net-mvc antiforgerytoken


    【解决方案1】:

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

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

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

    【讨论】:

    • Microsoft 在 MVC 框架中封存了大量可能不应该封存的类。我总是觉得这很奇怪。
    • 我很想离开它......我还没有一个实际的浏览器有这个问题,我猜是 ibm 设备正在做一些非标准的愚蠢行为。跨度>
    猜你喜欢
    • 2013-02-05
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多