2011-07-19 120 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();