.net безопасный вид от SQL-инъекций? - PullRequest
1 голос
/ 19 июля 2011

Я использую имя команды и командный аргумент для управления сортировкой (поле и направление). Насколько защищено состояние представления от внедрения SQL.

Ответы [ 4 ]

4 голосов
/ 19 июля 2011

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

Если ваш аргумент команды не введен пользователем динамически, внедрение SQL-кода не станет угрозой.

1 голос
/ 19 июля 2011

Если вы используете сырой SQL, то, скорее всего, вы используете DataTable объекты, верно?Если вы используете DataTable, вы можете отсортировать эти данные после их извлечения из базы данных, используя DataView, и связать свой элемент управления с DataView.Таким образом, вы не предоставляете предоставленным пользователем данным доступ к вашему SQL.Итак, в вашем коде вы бы сделали что-то вроде этого:

DataTable dt = GetData(); // pull data from DB with no sort specified
DataView view = dt.DefaultView;  // Get a DataView so you can sort
view.Sort = "Col1, Col2 DESC"; // assemble sort string from your command args
MyControl.DataSource = view;
MyControl.DataBind();
0 голосов
/ 19 июля 2011

Если вы передаете значения из ViewState в составной SQL, тогда да.Однако, если вы используете Параметры привязки (не так ли?), Вам не нужно об этом беспокоиться.

Плохо:

string sql = "select * from product where name = ' + ProductNameTextBox.Text + '"

Хорошо:

string sql = "select * from product where name = @name"

using(var command = new SqlCommand(sql, connection))
{

   SqlParameter param = new SqlServerParameter("@name", SqlDbType.VarChar, 50);
   param.Value = ProductNameTextBox.Text;

   command.Parameters.Add(param);

   command.ExecuteNonQuery();
}
0 голосов
/ 19 июля 2011

Зависит от того, означает ли «поместить непосредственно в SQL-запрос», что они являются параметрами параметризованного запроса или литералами ... если в качестве литералов, то ответ НЕТ.

...