データベースをデスクトッププログラムやWebサイトなどのプログラムインターフェイスと組み合わせて使用する場合、パラメーターを使用するとSQLインジェクション攻撃を防ぐことができます。
この例では、ユーザーはでステートメントを作成することにより、データベースでSQLコードを直接実行できますtxtSalary
。
たとえば、ユーザーがを記述した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を使用しているようです。パラメータの使用は次のように簡単です:
C#
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();
}
VB.NET
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
ステートメントでラップすることをお勧めします。