2009-03-02 4 views
1

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

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

Например

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

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

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

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

SELECT * FROM @table

ОТКРЫТЫЙ SYMMETRIC KEY @keyName

и т.д.

ответ

7

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

SqlCommand cmd = new SqlCommand(myQuery, conn); 
cmd.Parameters.Add("@lastname", SqlDbType.NVarChar, 10, lastName); 
+0

Это будет работать с стандартными запросами, но что, если бы мне пришлось использовать его для имени таблицы или другой ситуации, в которой этот метод не работал? –

3

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

(Это часто вывешивается)

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