2011-10-29 19 views
0

C#でSqlCommandを使用していて、そのコマンドにパラメータを追加すると、Sql注入に対して保護されるため、セキュリティが追加されると言われました。これが本当に真実かどうか疑問に思っていました。もしそうなら、Sql Injectionを止めるにはどうすればいいですか?パラメータを使うときはSqlコマンドのある点に文字列を挿入するだけで済むからです。その文字列は何でもよいので、Sql Injectionを可能にします。SqlCommandのパラメータの明確化

答えて

3

これは単純な置き換えではありません。フレームワークはをエスケープすると、(特に文字列)の値を[RPC呼び出しの別の部分として]送信するので、値をコードとして実行することはできません。

correction(6年後)の@PanagiotisKanavosに感謝します。

+0

フレームワークは目盛りの中の数字や何かを削除するでしょうか? –

+0

いいえ、それはクエリの一部として目盛りを含みます。あなたのフィールドが数字で、このようなものがあれば。 '+ 0 = 0'、そのすべてがパラメータになり、クエリを変更する注入意図とは対照的にクエリがエラーになります。エラーがあなたが望むものです。 –

+2

いいえ、それは何も削除されません、それはそれが書き込まれるようにデータベースに格納することができるようにそれをエンコードするだけです。 SqlParameterは、一致する列が適切に格納し符号化するデータ型にも注意を払い、stringがVARCHAR(n)を保持する列に収まるかどうかのようなバインド条件をチェックします。 –