投稿者 魔界の仮面弁士  (社会人) 投稿日時 2014/6/12 23:41:29
>> ユーザー名が「McDonald's」だった場合にエラーになります。
> 今、ログインをする際にユーザー名を使用する意味で捉えていますが大丈夫でしょうか?
ごめんなさい、ユーザー名ではなく、「パスワードもしくはユーザーIDが『McDonald's』だった場合」と読み替えてください。


> 問題を回避する理由はユーザー名を取り出す際になんらかの問題やエラーが起こらないようにする為の対策でしょうか?
はい、その通りです。特にここは認証に関わる部分ということもあり、、
間違ったパスワードで処理を通過してしまっては、都合が悪いですからね。


> 記号(&、%、$、¥、')などは使用していませんが、
文字種をあらかじめ制限しているのですね。

不正な文字が渡されないよう、ガードするようなコードを用意してあるのなら、
先のSQLの脆弱性の問題は起こりませんので、Replace 置換などの処理を
省略しても大丈夫です。


> TextBox1にユーザーID(1000,2000)
ちなみに、TextBox1 に数字しか入力できないようにしたいという場合、
KeyPress イベントで入力文字種を制限する手法が良く知られています。
http://dobon.net/vb/dotnet/control/numerictextbox.html

しかしこの方法だと、キーボードからの入力は制限する事ができても、
クリップボードからの貼り付けは防げないという欠点がありますのでご注意ください。

(上記サイトでは、クリップボード対策についても記載されていますが、他にも、
 音声認識入力、手書き文字認識などといった方法で入力される可能性もあります)

あるいは、Validating イベントで値をチェックする方法や、ログインボタン押下時に、
TextBox1.Text の内容を検査して、不正な文字が含まれていた場合にはログインさせず、
再入力を促す警告メッセージを表示するといった手法、あるいは標準の TextBox の代わりに、
数値しか入力できないコントロールで代用するといった手法もありますね。