Door parameters aan SQL door te geven, hoeft u geen dynamische SQL-string te bouwen.
Het bouwen van dynamische SQL-instructies is een ENORM beveiligingsrisico omdat mensen hun eigen SQL-code in uw toepassing kunnen injecteren en mogelijk ongewenste commando's tegen uw gegevens kunnen uitvoeren.
Er zijn enkele goede voorbeelden van mogelijke SQL-injectie-aanvallen op:
Voorbeeld SQL-injectieaanvallen
Er zijn twee manieren om parameters door te geven aan SQL-instructies. Een daarvan is om opgeslagen procedures te gebruiken zoals u al zei. De andere is het gebruik van geparametriseerde queries (waar ik eigenlijk de voorkeur aan geef).
Een geparametriseerde query is eigenlijk vrij eenvoudig in .NET:
using(SqlConnection conn = new SqlConnection(connString))
{
SqlCommand command =
new SqlCommand("SELECT * FROM Users WHERE Username = @Username", conn);
command.Parameters.Add(new SqlParameter("@Username", "Justin Niessner"));
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable dt = new DataTable();
adapter.Fill(dt);
}
In dat voorbeeld was de parameter @Username
en we gebruikten de Parameters
verzameling van de SqlCommand
object om de waarde door te geven.