Означает ли использование привязки параметров SQL, что текст может быть непосредственно введен из ввода? - PullRequest
3 голосов
/ 01 июля 2010

Как видно из заголовка, если я использую параметры SQL, то есть

SQLCommand cmd = new SQLCommand("select * from users where username = @user and password = @pass limit 1", Cxn);

cmd.Parameters.Add("@user", SqlDbType.VarChar):
cmd.Parameters.Add("@pass", SqlDbType.VarChar):

Могу ли я просто ввести значение параметра в качестве прямой записи из ввода?

cmd.Parameters["@user"].value = txtBxUserName.text;
cmd.Parameters["@pass"].value = txtBxPassword.text;

Это то, что, кажется, предлагается, когда бы вы ни искали что-либо, связанное с экранированием строки и т. Д., Конечный ответ - просто позволить привязке параметра сделать это.Но защитит ли это от инъекционных атак и тому подобного?Или вам все еще нужно выполнить некоторую проверку на стороне сервера?

Исходя из сильно ориентированного фона PHP, он идет против каждого волокна моего тела, чтобы напрямую вводить текст в запрос: p

Ответы [ 3 ]

7 голосов
/ 01 июля 2010

Пример, который вы привели, безопасен с точки зрения SQL-инъекции. Единственная потенциальная проблема SQL-инъекций с параметризованными запросами - это если они обращаются к процессу, который сам использует динамический SQL.

Конечно, вы все еще должны подумать о XSS-эксплойтах, независимо от того, настраиваете вы параметры или нет.

1 голос
/ 01 июля 2010

Да, это безопасный способ хранения данных в базе данных с использованием .net. Параметр SQL обеспечивает проверку и проверку типа. Поскольку они обрабатываются как буквальное значение, а не как исполняемый код, это предотвращает внедрение SQL.

0 голосов
/ 01 июля 2010

Использование параметров приведет к удалению всех специальных символов и предотвращению атак с использованием инъекций Вот почему параметры являются рекомендуемым методом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...