0

さまざまなソフトウェアのバックドアを探しており、次のコードが SQL インジェクションに対して脆弱かどうか疑問に思っています。

次の検証式を持つ電子メール フィールドがあります。(ASPX/CS)

ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">

上記を悪用して、たとえばテーブルを削除したり、SQL インジェクションを使用して悪意のあることをしたりすることは可能ですか?

ありがとうございます。それでは、お元気で

編集 1: 人々はこれがどのように実装されたかを私に尋ねてきました —</p>

SqlConnection conn = new SqlConnection(snpConnectionString);
SqlCommand command = conn.CreateCommand();
conn.Open();
command.CommandText = "INSERT INTO TABLE_ VALUES ('" + TextBoxFN.Text + "','" + TextBoxLN.Text + "','" + sb1.ToString() + "','" + TextBoxEA.Text + "','" + sb.ToString() + "',0,'" + DateTime.Now + "')";
try{
    SqlDataReader reader = command.ExecuteReader();
}
catch
{
    Response.Redirect("Error.aspx", true);
}

TextBoxEA.text は電子メール アドレスに対応します。

4

2 に答える 2

2

正規表現の検証は、UI またはビジネス層がユーザー入力をチェックしてエラーを防ぐのに最適です。

SQL インジェクションの防止にはあまり適していません。

コードがパラメーター化されたクエリを使用していない場合は、現在、または新しいビジネス要件に準拠するために誰かが正規表現を更新する際に軽微なエラーが発生した後に脆弱になります。

于 2012-11-27T01:48:32.593 に答える
1

エリックが述べたようにパラメーター化されたクエリを使用するのが最善ですが、正規表現を見ると、次の文字のみが有効です

A-Za-z0-9_-+.'

スペースがなければ、SQL を挿入することはできないと思いますが、それが私だったとしても、安全のためにパラメーター化されたクエリを使用するようにします。

于 2012-11-27T01:58:24.653 に答える