2012-04-24 168 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 

当你点击一个错误,你是包括引起错误,从而导致整个事情重新开始相同的字符串再次