2012-04-24 2 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 injection.s –

+0

«Невозможно оценить выражение» - это отладчик, а не ваш код. Вероятно, у вас есть часы на каком-то коде, который выходит за рамки. – vcsjones

ответ

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

+0

+1 о ретровании. – nalply

0

У вас может быть бесконечный цикл. Делает ли CheckInput для вашей страницы с ошибкой также?

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

При ударе об ошибке, вы в том числе и ту же строку, которая вызвала ошибку, таким образом, в результате чего все это, чтобы начать снова

Смежные вопросы