.net viewstate安全的SQL注入?

时间:2011-07-19 00:19:39

标签: asp.net sql-injection viewstate

我使用commandname和commandargument来控制排序(字段和方向)。 SQL注入的视图状态有多安全。

4 个答案:

答案 0 :(得分:4)

SQL injection用户输入的值直接放入查询中,允许恶意用户利用您的安全漏洞访问或损坏您的数据库。例如,您有一个要搜索的文本框,它们输入的值将在实际查询中。

除非您的命令参数是由用户动态输入的,否则SQL注入不会构成威胁。

答案 1 :(得分:1)

如果您使用的是原始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();

答案 2 :(得分:0)

这取决于“直接放入SQL查询”是指它们是参数化查询的参数还是文字...如果作为文字,则答案为否。

答案 3 :(得分:0)

如果要将ViewState中的值传递给连接的SQL,那么是。但是,如果你正在使用Bind Parameters(你是,不是吗?)那么你不必担心它。

<强>为:

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();
}