ADO.NET 占位符(防SQL 註入攻擊)
阿新 • • 發佈:2017-07-08
microsoft 維護 text conn 提前 輸入密碼 sql 密碼 ati
conn.Open();
cmd.CommandText = "insert into Users values(@a,@b,@c,@d,@e,@f,@g)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@a", ucode);
cmd.Parameters.AddWithValue("@b", username);
cmd.Parameters.AddWithValue("@c", password);
cmd.Parameters.AddWithValue("@d", nickname);
cmd.Parameters.AddWithValue("@e",sex);
cmd.Parameters.AddWithValue("@f", birthday);
cmd.Parameters.AddWithValue("@g", nation);
int count = cmd.ExecuteNonQuery();
conn.Close();
當在添加程序中註入攻擊時在控制臺應用程序中可以這樣寫:
請輸入編號:U006
請輸入用戶名:無敵
請輸入密碼:1234
請輸入昵稱:呵呵
請輸入性別:True
請輸入生日:2000-1-1
請輸入民族:N004‘);update Users set PassWord=‘0000‘;--
添加成功!
這樣,不僅添加成功一條數據,而且數據庫中Users表裏的所有數據的密碼都被修改成了0000。數據被篡改了,數據庫被成功註入攻擊。
那麽我們怎麽來防禦這種註入攻擊呢?
其實很簡單,只需要修改下程序,在添加數據的C#語句中使用占位符,把位置占住就可以了。
C#語句:
string nation = Console.ReadLine();
conn.Open();
cmd.CommandText = "insert into Users values(@a,@b,@c,@d,@e,@f,@g)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@a", ucode);
cmd.Parameters.AddWithValue("@b", username);
cmd.Parameters.AddWithValue("@c", password);
cmd.Parameters.AddWithValue("@d", nickname);
cmd.Parameters.AddWithValue("@e",sex);
cmd.Parameters.AddWithValue("@f", birthday);
cmd.Parameters.AddWithValue("@g", nation);
int count = cmd.ExecuteNonQuery();
conn.Close();
[email protected] 占位符提前占好位置。
這樣這條“N004‘);update Users set PassWord=‘0000‘;--”語句執行時,會被當成一個整體一塊被存入列名為Nation(民族)中。
同時程序維護人員也可以在後臺清楚的看到這條數據出現的異常~~~
ADO.NET 占位符(防SQL 註入攻擊)