2012-06-06 19 views
0

我正在使用ASP.NET MVC 2應用程序對DB2表執行基本的CRUD操作。當通過在IE中加載它來測試我的應用程序時,如果我將字符放入日期字段中的數字字段或數字中,或者與我的View Model中的數據類型不兼容的某種其他形式的數據,MVC將在其末尾執行正確的錯誤處理並且該視圖返回由Html.ValidationSummary()mvc幫助程序顯示的適當的模型狀態錯誤消息。爲什麼驗證通過第三方工具測試我的asp.net mvc 2應用程序時無法正常工作?

但是,當我使用IBM AppScan等程序運行測試或使用Fiddler2僞造POST請求時,應用程序將跳出。

我正在執行我認爲以兩種不同方式進行的相同測試,並獲得各種結果。

我也使用了MVC的AntiForgeryToken系統,但這並沒有太大的好處,因爲這些程序只是掃描請求數據,找到令牌,並確保它們包含在僞造的POST中。

另請注意,我在服務器端使用DataAnnotations來處理這些驗證中的幾個,而不是獲得註釋應該返回的錯誤,頁面被重定向到未捕獲異常的應用程序錯誤頁面。

我其實很困惑。我錯過了什麼?

+0

可能是因爲你做得不對。在瀏覽器和Fiddler中創建的POST之間發佈的數據有什麼區別?你不能在Fiddler中監控請求以查看差異嗎? – LukLed

+0

好的,更正。通過Fiddler發佈的僞造數據被正確驗證;這留下了任何IBM AppScan正在做的事情的奧祕。 – jason

+0

你不能在服務器端檢查'HttpContext.Current.Request.Form'嗎? – LukLed

回答

0

LukLed的評論讓我對事情做了一個理智的檢查,他絕對是對​​的。我做錯了。當我在Fiddler中僞造請求主體細節時,我以某種方式做到了這一點,即我知道數據不正確,但數據也會落入正確的驗證中,因此錯誤會被捕獲。我的測試,比如僅提供數字字段的字符(我曾認爲這是AppScan測試它時轟炸應用程序的那種)給出了正確的結果。

但是,LukLed的評論讓我真正看到了AppScan發送的POST數據。在每個應用程序錯誤中,該字段都是視圖模型中的一個字符串。我允許數據通過,而不需要對長度進行嚴格的檢查,並且「字符串數據正確截斷」。隨後出現SQL ERROR。這也表明我需要更好地清理數據,因爲AppScan提供的一些值類似於:

'../../../../../../ .. /../../../../../斌/ ID |」一個帳戶號碼字段 和

Foobar的%0D%0aAppScanHeader:%20AppScanValue%2F1%2E2%2D3%0D%0aSecondAppScanHeader:%20whatever」用於描述字段。

這些特殊字符如表單提交不應該被允許。

相關問題