sql >> Database teknologi >  >> RDS >> Oracle

Opbygning af en dynamisk forespørgsel i C# (SQL Injection Attack)

At bygge en forespørgsel på denne måde gør den sårbar over for SQL-injektionsangreb, medmindre du manuelt har undslippet dit input (dvs. gjort det umuligt for værdien af ​​'projectID' at ændre strukturen af ​​forespørgslen ved at bruge databasemotorspecifikke escape-sekvenser). Den anbefalede måde at gøre dette på er dog at bruge parametriserede forespørgsler (nogle gange kaldet "Forberedte erklæringer"). Med parametriserede forespørgsler definerer du blot strukturen af ​​forespørgslen og angiver derefter inputværdierne separat som parametre, hvilket forhindrer strukturen af ​​din forespørgsel i nogensinde at blive ændret via SQL-injektion.

Her er dit eksempel, ændret til at bruge parameterisering:

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

Parameteren ':ProjectID' i forespørgslen vil blive erstattet med værdien angivet i 'AddWithValue'-metoden. Uanset hvilken værdi der er i 'projectID'-variablen, vil den altid blive evalueret som en del af WHERE-sætningen. før, en værdi svarende til ['; DELETE FROM project;--] kunne have uønskede virkninger ved at ændre din forespørgsel til at læse som følger:

select projectName, managerName
  from project
  where projectID = ''; DELETE FROM project;--'


  1. Tabellen kan ikke afkortes, fordi den refereres af en FOREIGN KEY-begrænsning - SQL Server / TSQL Selvstudium, del 70

  2. postgres tekstsøgning

  3. ClusterControl:Introduktion til New Query Monitor

  4. komprimere tekst før lagring i mysql database