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 块捕获到错误,它就会继续给出错误并且不会重定向到错误页面。

有任何想法吗?

4

2 回答 2

9

“无法评估表达式”来自 Visual Studio 调试器,当它看到ThreadAbortExceptionResponse.Redirect. 如果没有附加调试器,您的代码将按预期工作。

您可以通过false以防止当前请求被结束(这就是它的ThreadAbortException用途)。然后,您负责优雅地“结束”请求。

FWIW,您还应该删除try/catch,因为它除了隐藏任何异常之外没有任何用处。而且,如前所述,SQL 参数是防止注入的方法——而不是白名单。

于 2012-04-24T17:37:44.617 回答
0

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

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

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

于 2012-04-24T17:31:02.933 回答