首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

ASP.NET 中安全構建帶參數的 SQL 查詢語句:避免字符串拼接風險

     編輯:程式設計疑難解答

錯誤示範

// 字符串拼接:存在 SQL 注入風險,且語法易錯
String a = String.Format("select * from id where id={0},label.text;");

上述代碼有兩個問題:

  1. 使用字符串格式化拼接 SQL,若 label.text 包含單引號或惡意代碼,將導致注入漏洞。
  2. 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()) {
        // 處理結果
    }
}

參數化查詢優勢

  • 安全:數據與代碼分離,徹底防止 SQL 注入。
  • 性能:數據庫可重用執行計劃。
  • 可維護:無需手動處理引號、日期格式等轉義。

如果必須拼接字符串(不推薦)

// 僅作為演示,生產環境嚴禁
string sql = "SELECT * FROM id WHERE id = '" + label.Text.Replace("'", "''") + "'";

即使手動轉義單引號,也無法防範所有注入向量,請堅持使用參數化查詢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved