C# 为什么在通过第三方工具测试我的asp.net mvc 2应用程序时验证无法正常工作?

C# 为什么在通过第三方工具测试我的asp.net mvc 2应用程序时验证无法正常工作?,c#,asp.net-mvc,asp.net-mvc-2,error-handling,fiddler,C#,Asp.net Mvc,Asp.net Mvc 2,Error Handling,Fiddler,我正在使用一个ASP.NETMVC2应用程序,该应用程序对DB2表执行基本CRUD操作。当通过简单地加载应用程序来测试应用程序时,也就是说,如果我在数字字段中输入字符,或在日期字段中输入数字,或在视图模型中输入与数据类型不兼容的其他形式的数据,MVC在其末端执行正确的错误处理,并返回视图,其中包含相应的模型状态错误消息,如Html.ValidationSummary()MVC帮助程序所示 但是,当我使用诸如IBM AppScan或使用Fiddler2伪造POST请求之类的程序运行测试时,应用程序

我正在使用一个ASP.NETMVC2应用程序,该应用程序对DB2表执行基本CRUD操作。当通过简单地加载应用程序来测试应用程序时,也就是说,如果我在数字字段中输入字符,或在日期字段中输入数字,或在视图模型中输入与数据类型不兼容的其他形式的数据,MVC在其末端执行正确的错误处理,并返回视图,其中包含相应的模型状态错误消息,如Html.ValidationSummary()MVC帮助程序所示

但是,当我使用诸如IBM AppScan或使用Fiddler2伪造POST请求之类的程序运行测试时,应用程序会跳转

我正在以两种不同的方式进行我认为是相同类型的测试,并且得到了不同的结果

我还使用了MVC的AntiForgeryToken系统,但这没有多大用处,因为这些程序只是扫描请求数据,找到令牌,并确保它包含在伪造的帖子中

还要注意的是,我在服务器端使用DataAnnotations来处理其中的几个验证,对于未捕获的异常,页面被重定向到应用程序错误页面,而不是获取注释应该返回的错误


事实上,我对这一切都很困惑。我遗漏了什么?

卢克莱德的评论让我对事情做了一次理智的检查,他是绝对正确的。我做错了。当我在Fiddler中伪造请求正文细节时,我知道数据可能不正确,但数据也会在正确的验证下,因此错误会被捕获。我的测试,比如为一个数字字段提交字符(我原以为这是AppScan测试应用程序时轰炸应用程序的事情)给出了正确的结果

然而,LukLed的评论让我真正看到了AppScan发送的POST数据。在每个应用程序错误中,字段都是viewmodel上的字符串。我允许数据通过,而无需对长度进行严格检查和“字符串数据右截断”。这也说明我需要更好地清理数据,因为AppScan提交的一些值如下:

“../../../../../../../../../../bin/id |”用于帐号字段 及

Foobar%0d%0aAppScanHeader:%20AppScanValue%2f1%2e2%2d3%0d%0aSecondAppScanHeader:%20whatever'用于描述字段


此类特殊字符不应出现在表单提交中。

可能是因为您操作不当。在浏览器中创建的帖子和在Fiddler中创建的帖子在发布数据方面有什么区别?你不能在Fiddler中监视请求以查看差异吗?好的,更正。通过Fiddler通过post完成的伪造数据得到正确验证;这就留下了IBM AppScan正在做什么的谜团。您不能在服务器端检查
HttpContext.Current.Request.Form
?请参阅更新的问题。你给我指明了正确的方向。这是我的ID10T错误。请记住将您的答案作为答案发布,并标记为正确。不要质疑解决方案。