從asp.net避免sql注入的最佳方式是什麼,但同時我想讓我的用戶可以自由輸入任何特殊符號。如何從asp.net處理sql注入
編輯
我沒有使用任何parametrised查詢,我使用的企業級磁帶庫和存儲過程
從asp.net避免sql注入的最佳方式是什麼,但同時我想讓我的用戶可以自由輸入任何特殊符號。如何從asp.net處理sql注入
編輯
我沒有使用任何parametrised查詢,我使用的企業級磁帶庫和存儲過程
如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();
}
}
參數化查詢。在任何你有查詢的地方使用它們,你的用戶可以輸入他們特別喜歡的任何符號。
如果您使用的是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
。
+1但是,即使在使用存儲過程時,您是否還需要遵循任何良好的做法? – Zerotoinfinity 2011-12-16 19:29:02