Вопрос

Я создаю сборку на С# для 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";
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top