2011-07-19 119 views
1

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

+0

能否请您发表您的SQL语句的代码? –

+0

如果您将这些命令名称或参数发送给客户端,只需在数据作为SQL执行之前对其进行清理,并且您将会很好(当然,如果这些都是这样的话) –

回答

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

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

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

0

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

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