我正在使用一个类检查我的应用程序中的某些单词以防止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块捕获到错误,它就会一直给出错误并且不会重定向到错误页面。
有什么想法吗?
答案 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
当您遇到错误时,您将包含导致错误的相同字符串,从而导致整个事情重新开始