Проверка впрыска сборки C # - PullRequest
1 голос
/ 02 марта 2009

Я создаю сборку в C # для MS SQL 2005. Эта сборка создает хранимую процедуру и выполняет динамический запрос на основе параметров, переданных в хранимую процедуру.

Есть ли в C # простая функция для предотвращения внедрения SQL?

Например

string myQuery = "SELECT * FROM dbo.MyTable WHERE lastName = '" + injectionCheck(arg1) + "'";

На этот вопрос был дан ответ для стандартного запроса ... но в ситуациях, когда нет способа создать действительно динамический запрос, что я могу использовать в C # для проверки внедрения?

Например, они, вероятно, не будут работать:

с использованием @dbName;

SELECT * FROM @ table

ОТКРЫТЫЙ СИММЕТРИЧНЫЙ КЛЮЧ @ keyName

и т.д.

Ответы [ 2 ]

7 голосов
/ 02 марта 2009

Использовать связанные параметры:

SqlCommand cmd = new SqlCommand(myQuery, conn);
cmd.Parameters.Add("@lastname", SqlDbType.NVarChar, 10, lastName);
3 голосов
/ 02 марта 2009

Использовать параметры ....

(это уже часто публиковалось)

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";
...