Door op deze manier een query te maken, wordt deze kwetsbaar voor SQL-injectie-aanvallen, tenzij u handmatig aan uw invoer hebt ontsnapt (I.E. maakte het onmogelijk voor de waarde van 'projectID' om de structuur van de query te wijzigen door gebruik te maken van specifieke ontsnappingsreeksen van de database-engine). De aanbevolen manier om dit te doen is echter het gebruik van geparametriseerde query's (soms "Voorbereide instructies" genoemd). Met query's met parameters definieert u eenvoudig de structuur van de query en geeft u de invoerwaarden afzonderlijk als parameters op, zodat de structuur van uw query nooit via SQL-injectie wordt gewijzigd.
Hier is uw voorbeeld, gewijzigd om parametrering te gebruiken:
public DataSet GetProject(string projectID)
{
DataSet dataTable = new DataSet();
DataAccess dataAccess = new DataAccess();
OracleCommand commandOb = new OracleCommand();
strQuery = @"select projectName, managerName
from project
where projectID = :ProjectID"
cmd.CommandText = strQuery;
cmd.Parameters.AddWithValue("ProjectID", projectID);
dataTable = dataAccess.ExecuteDataAdapter(commandOb);
return dataTable;
}
De parameter ':ProjectID' in de query wordt vervangen door de waarde die is opgegeven in de 'AddWithValue'-methode. Welke waarde er ook in de variabele 'projectID' staat, deze wordt altijd geëvalueerd als onderdeel van de WHERE-component. Overwegende dat voorheen een waarde gelijk aan ['; DELETE FROM project;--] kan ongewenste effecten hebben door uw zoekopdracht als volgt te wijzigen:
select projectName, managerName
from project
where projectID = ''; DELETE FROM project;--'