2013-10-03 5 views
0

Проверяет ли sqlCommand.Parameters.Add (sqlParam) резервные слова, такие как «Таблица», «Падение» и т. Д. В основном я хочу знать, используя выше, как мы можем избежать Sql Injection, что такое механизм там.Parameters.Add и Sql Injection

ответ

2

Все зависит от того, что вы планируете делать с параметрами SQL, которые вы выполняете. Хорошая вещь об использовании .Parameters.Add() заключается в том, что значения передаются отдельно, а не часть 1 большого куска-о-sql. Конечно, вам решать, что с ними делать.

Предполагая, что вы делаете что-то вроде этого:

SELECT * FROM myTable WHERE customer_nr = @customer_nr 

Тогда это на самом деле не имеет значения, если «хакер» прошло что-то вдоль линий ';DROP TABLE myTable --. Запрос будет просто ничего не вернуть, потому что ни один клиент не называется `«; DROP TABLE MyTable -»

Однако, если вы собираетесь использовать его как это:

SELECT @sql = 'SELECT * FROM myTable WHERE customer_nr = ''' + @customer_nr + '''' 
EXEC (@sql) 

то поражение цели системы, и хакер сможет выполнить некоторые SQL-инъекции.

+1

Вы действительно должны прочитать статью, посвященную Bobby Tables (http://stackoverflow.com/questions/332365/how-does-the-sql-injection-from-the-bobby-tables-xkcd-comic- work? rq = 1), он объясняет вещи намного лучше и ссылается на многие другие связанные данные. – deroby

+0

Итак, это подразумевает: .Parameters.Add() будет избегать инъекции sql, и мы не хотим, чтобы Sps всегда решали его? – aads

+0

Parameters.Add() действительно поможет вам избежать SQL-инъекций. Независимо от того, выполняете ли вы фактические команды SQL непосредственно в .CommandText или, скорее, через хранимую процедуру, на самом деле не имеет значения в этой части (хотя я предпочитаю хранимые процедуры!). Просто не попадайте в ловушку преобразования параметров обратно в динамический SQL, как в .CommandText, так и в хранимой процедуре, как я уже говорил выше. – deroby

0

В качестве резервных слов он не обрабатывает параметры. Использование параметризованных хранимых процедур - лучший способ избежать внедрения sql.

+0

Спасибо за ваш ответ, пожалуйста, предоставьте мне ссылку, где он заявляет, что заполнители не помогут предотвратить SQL-инъекцию. – aads

+0

О ... Я уверен, что могу придумать параметризованную хранимую процедуру, уязвимую для атаки SQL Injection Attack. :) –