0

我正在使用对 DB2 表执行基本 CRUD 操作的 ASP.NET MVC 2 应用程序。在通过简单地在 IE 中加载应用程序来测试我的应用程序时,如果我将字符放在数字字段中或将数字放在日期字段中或与我的视图模型中的数据类型不兼容的其他形式的数据中,MVC 会在其末端执行正确的错误处理并返回视图,其中包含 Html.ValidationSummary() mvc 帮助器显示的相应模型状态错误消息。

但是,当我使用 IBM AppScan 等程序运行测试或使用 Fiddler2 伪造 POST 请求时,应用程序会崩溃。

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

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

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

我实际上对这一切感到很困惑。我错过了什么?

4

1 回答 1

0

LukLed 的评论让我对事情进行了全面检查,他是绝对正确的。我做错了。当我在 Fiddler 中伪造请求正文详细信息时,我以一种我知道数据不正确的方式进行操作,但数据也将属于正确的验证范围,因此会捕获错误。我的测试,例如为仅数字字段提交字符(当 AppScan 测试它时,我认为这是轰炸应用程序的那种东西)给出了正确的结果。

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

'../../../../../../../../../../../../bin/id|' 对于帐号字段和

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

表单提交中不应允许使用诸如此类的特殊字符。

于 2012-06-07T13:12:18.147 回答