2012-04-24 24 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 injectionsの準備文を使用する必要があります。 –

+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 

あなたは、あなたは、このように全体のことを最初からやり直しさせ、エラーの原因となったものと同じ文字列を含むされているエラーを打つときに再び

関連する問題