无法评估表达式

时间:2012-04-24 17:26:27

标签: asp.net .net vb.net visual-studio

我正在使用一个类检查我的应用程序中的某些单词以防止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 个答案:

答案 0 :(得分: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参数是防止注入的方式 - 而不是白名单。

答案 1 :(得分:0)

你可能有一个无限循环。 CheckInput是否也会针对您的错误页面运行?

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

当您遇到错误时,您将包含导致错误的相同字符串,从而导致整个事情重新开始