У нас есть старое приложение на C #, где у нас есть много встроенных SQL-запросов, которые выполняются к входным данным, которые были переданы пользователем.Итак, очевидно, что SQL-инъекция вошла в картину.Сейчас мы хотим это исправить, но дело в том, что мы хотим придерживаться минималистического подхода.Не трогая много кода.Таким образом, ORM и хранимые процедуры являются для нас чем-то вроде уравнения.
Мы должны обновить каждый встроенный оператор, чтобы использовать подход параметризации SQL.Однако, то, что я ищу, может быть, если есть общий способ сделать это.Например, отправить запрос методу и динамически сгенерировать массив SqlParameter
.
Под запросом я подразумеваю буквально запрос всякий раз, когда могу, без использования обычного @
Select *
From table
Where id = 1 and name = 'Sean' and
location like '%cali'
.
List<Sqlparameters> params = new
List<Sqlparameters>()
var query = Select * from table where id = @v1 and name =@v2 and location like @v3
params.Add("v1", 1)
params.Add("v2", 'Sean')
params.Add("v3","%cali")
Обновление
Теперь у меня есть метод, который делает это для меня.Это займет текст SQL, как это
var sql = "select * from merchants where merchantID={" + Request["merchantid"] +"}"
Метод
Public command Method(string query)
{
var cmd =new Command();
cmd.text="";
cmd.params=new List<SqlParameter>() ;
// code to trasform the query. Identify values based on the special char '{'. Dynamically adds placeholder variables and values into an array
cmd.text="select * from merchants where merchantID=@variable1
//Loops through variables and adds values
// to parameters
cmd.parameters.Add(new SqlParameter("variable1", value1);
return cmd;
}