Używanie parametrów pomaga zapobiegać atakom wstrzykiwania SQL gdy baza danych jest używana w połączeniu z interfejsem programu, takim jak program komputerowy lub witryna internetowa.
W Twoim przykładzie użytkownik może bezpośrednio uruchomić kod SQL w Twojej bazie danych, tworząc instrukcje w txtSalary
.
Na przykład, gdyby mieli napisać 0 OR 1=1
, wykonany SQL byłby
SELECT empSalary from employee where salary = 0 or 1=1
dzięki czemu wszystkie empSalaries zostaną zwrócone.
Co więcej, użytkownik może wykonywać znacznie gorsze polecenia w stosunku do Twojej bazy danych, w tym usuwać ją Jeśli napisał 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
Tabela employee
zostanie wtedy usunięty.
W twoim przypadku wygląda na to, że używasz platformy .NET. Korzystanie z parametrów jest tak proste, jak:
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
Edytuj 25.04.2016:
Zgodnie z komentarzem George'a Stockera zmieniłem przykładowy kod, aby nie używał AddWithValue
. Ponadto ogólnie zaleca się zawinięcie IDisposable
s w using
oświadczenia.