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ブロックがエラーをキャッチすると、エラーを出し続け、エラーページにリダイレクトされません。

何か案は?

4

2 に答える 2

9

ThreadAbortException「式を評価できません」は、によってスローされResponse.Redirectたものを確認したときに、VisualStudioデバッガーからのものです。デバッガーが接続されていなくても、コードは期待どおりに機能します。

false現在のリクエストが終了しないようにパスすることができます(これがThreadAbortException目的です)。その後、リクエストを適切に「終了」する責任があります。

FWIW、例外を非表示にする以外の有用な目的try/catchを果たしていないため、も削除する必要があります。そして、前述のように、SQLパラメータは、ホワイトリストではなく、インジェクションを防ぐ方法です。

于 2012-04-24T17:37:44.617 に答える
0

無限ループになっている可能性があります。CheckInputエラーページでも実行されますか?

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

エラーが発生すると、エラーの原因となったのと同じ文字列が含まれているため、すべてが最初からやり直されます

于 2012-04-24T17:31:02.933 に答える