SQL文を作成するのに
Dim sql as String sql="SELECT * FROM Table WHERE ID = " & TextBox.Text & ";"とかやってませんか?
本屋さんに並んでいるVB.NET関連の書籍ではほぼ100%このようなコードになっているようですが...
しかもデータベース云々とデータベースへのアクセスのコードがメインになっているものでさえです。
しかもこういう書籍に限って入力値の検証さえも行っていないし、プレースホルダという機能があるということに触れてもいないことが多いですね。
こういった書籍で学んだ人が後々にSQLインジェクションの被害にあうんでしょうか?
これをきっかけにしてできるだけ(というか必ず)プレースホルダを使いましょう。
[基本的な使い方]
Dim SqlCommand As New System.Data.OleDb.OleDbCommand SqlCommand.CommandText = "SELECT * FROM Table WHERE ID = @ID;" SqlCommand.Parameters.Add("@ID", OleDb.OleDbType.Integer) SqlCommand.Parameters("@ID").Value = IDプレースホルダを使うことで
- コード内で明示的なデータ型を指定するのでケアレスミスの防止
- SQLインジェクションの防止に効果的
- SQL文が効率的に実行される(らしい)