Oracle
 sql >> база данни >  >> RDS >> Oracle

Изграждане на динамична заявка в C# (SQL Injection Attack)

Изграждането на заявка по този начин я прави уязвима за атаки чрез SQL инжектиране, освен ако ръчно не сте избягали от входа си (т.е. направи невъзможно стойността на „projectID“ да промени структурата на заявката чрез използване на специфични последователности за избягване на двигателя на базата данни). Препоръчителният начин за това обаче е използването на параметризирани заявки (понякога наричани „Подготвени отчети“). С параметризираните заявки вие просто дефинирате структурата на заявката и след това предоставяте входните стойности отделно като параметри, предотвратявайки промяната на структурата на вашата заявка чрез SQL инжектиране.

Ето вашия пример, променен за използване на параметризиране:

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

Параметърът „:ProjectID“ в заявката ще бъде заменен със стойността, дадена в метода „AddWithValue“. Без значение каква е стойността в променливата 'projectID', тя винаги ще се оценява като част от клаузата WHERE. Докато преди стойност, подобна на ['; DELETE FROM project;--] може да има нежелани ефекти, ако промените заявката си така, че да се чете по следния начин:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Увеличете производителността с групово събиране в Oracle

  2. Как да вмъкнете няколко реда в една и съща таблица-Oracle 10g

  3. Извикване на пакетна функция на Oracle с помощта на Odbc от C#

  4. Няма onMessage събития в Runtime (Java JMS MessageListener в Oracle Queue)

  5. Как да форматирате отрицателни числа с ъглови скоби в Oracle