sql >> Database >  >> RDS >> Oracle

Een dynamische query bouwen in C# (SQL Injection Attack)

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;--'


  1. hoe een vingerafdruksjabloon naar de Oracle-database te verplaatsen

  2. Afstemming van PL/SQL-prestaties voor LIKE '%...%'-query's met jokertekens

  3. Sql - tellen in meerdere kolommen

  4. hoe geef je een null-waarde door aan een veld met een externe sleutel?