无法评估表达式
我正在使用类来检查我的应用程序中的某些单词以防止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块捕获错误,它一直给错误和不重定向到错误页面。
任何想法?
“无法计算表达式”是从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参数是防止注入的方法 - 而不是白名单。
非常感谢。 – gabsferreira 2012-04-24 18:10:37
+1关于rethrowing。 – nalply 2013-04-03 08:15:06
您可能有无限循环。 CheckInput
是否也为您的错误页面运行?
Dim errorPage As String = "error_page.aspx?Injection=" & parameter
当你点击一个错误,你是包括引起错误,从而导致整个事情重新开始相同的字符串再次
您应该使用sql注入语句的准备语句。 – 2012-04-24 17:28:23
“无法评估表达式”来自调试器,而不是您的代码。您可能会看到一些超出范围的代码。 – vcsjones 2012-04-24 17:29:41