2011-12-07 14 views
1

SSLで動作しているASP.NETページがあり、コードビハインドでチェックが行われます。不要な/危険な文字をフィルタリングするために正規表現を含まSQLインジェクションのための他の方法はありますか?

  1. は(基本的に、それは今だけ0-9を可能にする、-Z、および-Z):

    私は、SQLインジェクションを防ぐために、次のやりました。

  2. 「SELECT * FROM table WHERE username = @Username ...」のようなクエリを使用します。

  3. アカウントロックアウトも追加されているため、制限付きの試用が可能です。

IBM AppScanが脆弱性をテストした後、私はBlind SQL Injectionを修正しただけで、Authenticated Bypassは修正していないようです。

私が脆弱性テストに失敗する原因になっているものがありますか?

UPDATE:

... 

bool bUser = FilterInput(txtUsername.Text); 
bool bPass = FilterInput(txtPassword.Text); 

// check for restricted characters 
if (bUser && bPass) 
    Response.Redirect("Login.aspx"); 
... 

public static bool FilterInput(string text) 
{ 
    // check if string contains only letters and numbers 
    return (Regex.IsMatch(text, @"^[a-zA-Z0-9]+$")); 
} 

ない-ZA-Z0-9文字内のものは「偽」をスローする必要があり、ページがログインページを更新/リダイレクトさせるような。

DBクエリはすべてパラメータ化クエリを使用しており、ログインは正しく機能します。その部分については問題ありません。

+4

あなたの質問の件名はあなたが結んだ実際の質問に関連していないようです。 #2でSQLインジェクションを修正しました。パラメータ化されたクエリ –

+3

正しく処理すると、危険な文字はありません。オプション1は意味がないので、オプション2で完全に緩和する必要があります。 – spender

+0

"Authenticated bypass"に関する情報を少し提供することが考えられます。 「ibm appscan」認証バイパス「」(http://www.google.com/search?q=ibm+appscan+%22authenticated+bypass%22&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla: en-GB:official&client = firefox-a)は、この質問のみを返します。 – spender

答えて

0

明らかに2つのDBクエリがありますコードはパラメータ化されたクエリに更新されませんでした。

SQLインジェクションを防ぐためにパラメータ化されたクエリで十分でしたので、他のステップ/機能は少し残酷です。

1

ドロップあなたがした最初のものと以下に説明するように、単にSqlCommand.Parametersを使用します。

SQL Injection vs. Lethal Injection/Protection Against SQL Injection

私は常にデータベースにアクセスするために、複数の接続文字列を使用し、それらのそれぞれが異なる役割を持っています: の読み取り,の書き込み,実行。そうしたときに、攻撃が正常に行われた場合、攻撃者は読み込み以外の攻撃を行うことはできません(まだ悪いですが、修正よりも良いですが)。

+0

OPはすでにパラメータ化されたクエリを使用しています。項目#2を参照してください。 –

+2

@AndrewBarber私は知っています。私はちょうど彼が最初にしたことは意味をなさないと言って、2番目はすべてを世話するだろうと言っている。 – tugberk

+0

合意。 #1は不要です(そして、不必要に制限します)。 –

関連する問題