2011-12-16 45 views
0

從asp.net避免sql注入的最佳方式是什麼,但同時我想讓我的用戶可以自由輸入任何特殊符號。如何從asp.net處理sql注入

編輯

我沒有使用任何parametrised查詢,我使用的企業級磁帶庫和存儲過程

回答

1

bobby-tables所述,使用SqlCommand.Prepare Method

private static void SqlCommandPrepareEx(string connectionString) 
{ 
    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     connection.Open(); 
     SqlCommand command = new SqlCommand(null, connection); 

     // Create and prepare an SQL statement. 
     command.CommandText = 
      "INSERT INTO Region (RegionID, RegionDescription) " + 
      "VALUES (@id, @desc)"; 
     SqlParameter idParam = new SqlParameter("@id", SqlDbType.Int, 0); 
     SqlParameter descParam = 
      new SqlParameter("@desc", SqlDbType.Text, 100); 
     idParam.Value = 20; 
     descParam.Value = "First Region"; 
     command.Parameters.Add(idParam); 
     command.Parameters.Add(descParam); 

     // Call Prepare after setting the Commandtext and Parameters. 
     command.Prepare(); 
     command.ExecuteNonQuery(); 

     // Change parameter values and call ExecuteNonQuery. 
     command.Parameters[0].Value = 21; 
     command.Parameters[1].Value = "Second Region"; 
     command.ExecuteNonQuery(); 
    } 
} 
2

參數化查詢。在任何你有查詢的地方使用它們,你的用戶可以輸入他們特別喜歡的任何符號。

如果您使用的是ORM,這是非常爲您處理,但如果你沒有,那麼你需要做的是這樣的:

comm.CommandText = "insert into MyTable (col1, col2) values (@col1, @col2)"; 
comm.Parameters.AddWithValue("@col1", 123); 
comm.Parameters.AddWithValue("@col2", "; drop table whatever; --"); 
comm.ExecuteNonQuery(); 

查詢是100%安全地運行廣告噁心。讓.NET爲你處理參數,並且你將全部設置好。

另外,如果您的用戶要在ANSI字符集之外插入符號,請確保您使用的是nvarchar(Unicode)列,而不是varchar

+0

+1但是,即使在使用存儲過程時,您是否還需要遵循任何良好的做法? – Zerotoinfinity 2011-12-16 19:29:02