2011-10-28 34 views
2

我正在爲全文搜索包調用系統存儲過程。它生成用於基於sql文本的全文搜索的術語。使用存儲過程防止SQL注入

例如:EXEC ctx_query.explain( 'INDEX_NAME', '全文過濾器', '說明表')等

我做在我的代碼如下:

using(OracleCommand command = new OracleCommand("ctx_query.explain", DataAccess.GetConnString())) 
{ 
    comm.Parameters.AddWithValue("index_name", "explain1"); 
    //comm.Parameters.AddWithValue("text_query", "(test) OR (term1 ACCUM term2"); 
    comm.Parameters.AddWithValue("text_query", txtUserInput.Text); 
    comm.Parameters.AddWithValue("explain_table", "explain_results"); 
    comm.Parameters.AddWithValue("sharelevel", 0); 
    comm.Parameters.AddWithValue("explain_id", new Guid().ToString().Substring(0,30)); 
    comm.ExecuteNonQuery();  
} 

的「 text_query「參數將由用戶輸入構建。上述是否防止sql注入,因爲textUserInput.Text將作爲命令參數傳遞?

回答

0

ctx_query.explain不會執行查詢,它只檢查它,所以這裏沒有SQL注入風險。

+0

但是不能有人輸入'「); DELETE FROM table作爲用戶輸入嗎? – user730108

+0

是的,'ctx_query.explain'將**檢查並報告**,它不會執行**它。 –