2012-04-24 221 views
2

我正在使用類來檢查我的應用程序中的某些單詞以防止SQL注入。無法評估表達式

在該類中,有一個for循環嘗試將特定單詞與黑名單中的單詞進行匹配。 如果匹配,我必須重定向到系統的錯誤頁面。

但是,當找到匹配項並嘗試重定向時,我不斷收到錯誤「無法評估表達式」。

下面是代碼:

Private Sub CheckInput(ByVal parameter As String) 
Try 
    Dim errorPage As String = "error_page.aspx?Injection=" & parameter 

    For i As Integer = 0 To blackList.Length - 1 
     If (parameter.IndexOf(blackList(i), StringComparison.OrdinalIgnoreCase) >= 0) Then 
      'Handle the discovery of suspicious Sql characters here 
      'generic error page on your site 
      HttpContext.Current.Response.Redirect(errorPage) 
     End If 
    Next 

Catch ex As Exception 
    Throw ex 
End Try 

一旦Try塊捕獲錯誤,它一直給錯誤和不重定向到錯誤頁面。

任何想法?

+2

您應該使用sql注入語句的準備語句。 – 2012-04-24 17:28:23

+0

「無法評估表達式」來自調試器,而不是您的代碼。您可能會看到一些超出範圍的代碼。 – vcsjones 2012-04-24 17:29:41

回答

9

「無法計算表達式」是從Visual Studio調試器,當它看到ThreadAbortException thrown by Response.Redirect。如果沒有附加調試器,代碼將按預期工作。

You can pass false to prevent the current request being ended(這是ThreadAbortException的用途)。然後,您負責優雅地「結束」請求。

FWIW,你也應該刪除try/catch,因爲它的服務no useful purpose other than hiding any exceptions。而且,如前所述,SQL參數是防止注入的方法 - 而不是白名單。

+0

非常感謝。 – gabsferreira 2012-04-24 18:10:37

+0

+1關於rethrowing。 – nalply 2013-04-03 08:15:06

0

您可能有無限循環。 CheckInput是否也爲您的錯誤頁面運行?

Dim errorPage As String = "error_page.aspx?Injection=" & parameter 

當你點擊一個錯誤,你是包括引起錯誤,從而導致整個事情重新開始相同的字符串再次