Проверка внедрения сборки C#
-
03-07-2019 - |
Вопрос
Я создаю сборку на С# для MS SQL 2005.Эта сборка создает хранимую процедуру и выполняет динамический запрос на основе параметров, переданных в хранимую процедуру.
Есть ли в С# простая функция для предотвращения внедрения SQL?
Например
string myQuery = "SELECT * FROM dbo.MyTable WHERE lastName = '" + injectionCheck(arg1) + "'";
На этот вопрос был дан ответ по стандартному запросу...но в ситуациях, когда нет возможности построить по-настоящему динамический запрос, что я могу использовать в C# для проверки внедрения?
Например, это, вероятно, не сработает:
используя @dbName;
ВЫБРАТЬ * ИЗ @table
ОТКРЫТЬ СИММЕТРИЧНЫЙ КЛЮЧ @keyName
и т. д.
Решение
Используйте связанные параметры:
SqlCommand cmd = new SqlCommand(myQuery, conn);
cmd.Parameters.Add("@lastname", SqlDbType.NVarChar, 10, lastName);
Другие советы
Используйте параметры....
(Это уже часто публиковалось)
string myQuery = "SELECT * FROM myTable WHERE lastname = @p_name";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = myQuery;
cmd.Parameters.Add ("@p_name", SqlDbType.Varchar).Value = "melp";
Не связан с StackOverflow