// 字符串拼接:存在 SQL 注入風險,且語法易錯
String a = String.Format("select * from id where id={0},label.text;");
上述代碼有兩個問題:
label.text 包含單引號或惡意代碼,將導致注入漏洞。String.Format 參數佔位符 {0} 後多了一個逗號和分號,語法錯誤。using (SqlConnection conn = new SqlConnection(connStr))
using (SqlCommand cmd = new SqlCommand("SELECT * FROM id WHERE id = @id", conn)) {
cmd.Parameters.AddWithValue("@id", label.Text); // 自動處理類型與轉義
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader()) {
// 處理結果
}
}
// 僅作為演示,生產環境嚴禁
string sql = "SELECT * FROM id WHERE id = '" + label.Text.Replace("'", "''") + "'";
即使手動轉義單引號,也無法防範所有注入向量,請堅持使用參數化查詢。