Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Budowanie dynamicznego zapytania w C# (atak wstrzykiwania SQL)

Budowanie zapytania w ten sposób sprawia, że ​​jest ono podatne na ataki wstrzyknięcia SQL, chyba że ręcznie zmieniłeś znaczenie danych wejściowych (tj. uniemożliwiło wartość „projectID” zmianę struktury zapytania przy użyciu sekwencji ucieczki specyficznych dla silnika bazy danych). Jednak zalecanym sposobem, aby to zrobić, jest użycie zapytań parametrycznych (czasami nazywanych „Przygotowanymi instrukcjami”). W przypadku zapytań parametrycznych po prostu definiujesz strukturę zapytania, a następnie podajesz wartości wejściowe oddzielnie jako parametry, zapobiegając zmianie struktury zapytania przez wstrzyknięcie SQL.

Oto twój przykład, zmieniony na użycie parametryzacji:

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

Parametr ':ProjectID' w zapytaniu zostanie zastąpiony wartością podaną w metodzie 'AddWithValue'. Bez względu na to, jaka wartość znajduje się w zmiennej „projectID”, zawsze będzie ona oceniana jako część klauzuli WHERE. poprzednio wartość podobna do ['; USUŃ Z projektu;--] może mieć niepożądane skutki, zmieniając zapytanie na następujące:

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. Uzyskaj całkowitą liczbę wierszy w zapytaniu o paginację

  2. Jakie jest zastosowanie zmiennej TNS_ADMIN w Oracle?

  3. Jaki typ danych powinienem powiązać jako parametr zapytania, aby używać go z kolumną NUMBER(15) w Oracle ODBC?

  4. Data i godzina Oracle bez czasu letniego za pośrednictwem JDBC

  5. SQL:wstaw wiersze z sumowanymi wartościami