パラメータを使用すると、SQLインジェクション攻撃を防ぐのに役立ちます データベースをデスクトッププログラムやWebサイトなどのプログラムインターフェイスと組み合わせて使用する場合。
この例では、ユーザーはtxtSalary
でステートメントを作成することにより、データベースでSQLコードを直接実行できます。 。
たとえば、0 OR 1=1
と書く場合 、実行されるSQLは
SELECT empSalary from employee where salary = 0 or 1=1
これにより、すべてのempSalariesが返されます。
さらに、ユーザーが0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
テーブルemployee
その後、削除されます。
あなたの場合、.NETを使用しているように見えます。パラメータの使用は次のように簡単です:
string sql = "SELECT empSalary from employee where salary = @salary";
using (SqlConnection connection = new SqlConnection(/* connection info */))
using (SqlCommand command = new SqlCommand(sql, connection))
{
var salaryParam = new SqlParameter("salary", SqlDbType.Money);
salaryParam.Value = txtMoney.Text;
command.Parameters.Add(salaryParam);
var results = command.ExecuteReader();
}
Dim sql As String = "SELECT empSalary from employee where salary = @salary"
Using connection As New SqlConnection("connectionString")
Using command As New SqlCommand(sql, connection)
Dim salaryParam = New SqlParameter("salary", SqlDbType.Money)
salaryParam.Value = txtMoney.Text
command.Parameters.Add(salaryParam)
Dim results = command.ExecuteReader()
End Using
End Using
2016年4月25日編集:
George Stockerのコメントによると、サンプルコードをAddWithValue
を使用しないように変更しました。 。また、通常はIDisposable
をラップすることをお勧めします s using
ステートメント。