2010-11-26 23 views
0

私のプログラムを通して、私はおそらく50かそこらのテキストボックスを様々な場所に持っています。私は何か(この場合は ' - > \')で一重引用符を置き換える方法を知っていますが、すべての単一テキストボックスに特定のコードを追加して追加するよりも、これを行うためのより良い方法が必要であると考えています。私はこれを行う必要があるので、このものがデータベースに送られるときに、一重引用符があればエラーになるからです。プログラムのすべてのテキストボックスが自動的にすべての一重引用符を\ 'に置き換えるように、既定のTextBoxコントロールの動作を変更する方法はありますか?私のプログラムのすべてのテキストボックスに 'とを置き換えます。

EDIT:

 string statement = "select count(*) from users where username='@username'"; 
    MySqlCommand command = new MySqlCommand(statement, conn); 
    command.Parameters.AddWithValue("@username", username); 
    if (Convert.ToInt32(command.ExecuteScalar()) == 1) 

私はparamerterizedコードで遊んでてきた、これは私が今持っているものです。どのように私はそれを理解するから、ステートメント文字列は、基本的に以前と同じですが、私は(私は@ usernameという)パラメータを使用して知っている変数 "username"を持っていた場所、コマンドが作成されます。次に、parameters.addwithvalueで、パラメータusernameの代わりに、変数usernameにあるものを置き換えます。残念ながら、これは私のために働いていない、と私は本当にユーザー名はまだコマンドに立ち往生しているので、それがどのように役立つかわからない?

EDIT:、問題を発見声明の中で、あなたが「@ユーザー名」の周りに単一引用符を配置する必要はありません

ので、それは次のようになります。

string statement = "select count(*) from users where [email protected]"; 

答えて

6

は、構築するために連結を使用しないでください。 SQLクエリ。適切なparametrized queriesを使用してください。これは繰り返しクエリをより速くし、入力サニタイズコード(たとえばを\'に置き換える)とSQLインジェクション攻撃を排除します。

+0

私の投稿を編集しました。もう一度ご覧ください。これらのコメントにコードを投稿する方法がわからないので、そこに記述してください。 – zack

+0

ありがとうございます。あなたは私にトンを助けた:D – zack

+0

問題はありません。この変更により、巨大な種類のセキュリティ脆弱性が排除されました。 – cdhowie

0

Uは、onKeyUpのjavascript関数またはasp.netのOnTextChangedイベントを使用して、引用符を変更する関数を作成できます。

+1

WPFはASP.NETではありません。 – cdhowie

+0

私はwpfタグを見ませんでした.. –

1

問題を解決するだけでなく、SQLインジェクションへの露出を減らすために、パラメータ化されたクエリを使用する必要があります。文字列連結を使用してSQLクエリを作成すると、SQL injectionの攻撃が可能になります。

関連する問題