首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 安全實戰:加密機制與 SQL 注入攻擊防禦全解析

     編輯:關於SqlServer

一、SQL Server 內建加密機制

自動加密項目

  • 密碼: 登入與應用程式角色密碼自動加密,系統表不可直接讀取明文
  • 物件定義: 建立預存程序/視圖/觸發器/函數/預設值/規則時加 WITH ENCRYPTION,隱藏 sp_helptext 顯示
  • 傳輸加密: 用戶端與伺服器間資料傳輸可啟用 SSL/TLS 加密

物件加密語法

CREATE PROCEDURE proc_name
  @param datatype
WITH ENCRYPTION
AS
  -- 加密後 sp_helptext 無法檢視,需保留原始碼備份

代價: 連線建立後需解密執行,編譯期效能稍降;網路封包不可控環境建議啟用。

資料加密缺口與建議

  • SQL Server 2000 無內建資料行加密函數
  • 建議:
    1. 善用 GRANT/DENY 控制資料行存取權限
    2. 應用層使用成熟商業加密演算法(AES 等)加密後再存入

二、SQL 注入攻擊原理與防禦

攻擊原理

開發者將使用者輸入直接拼接 SQL 字串:

strQuery = "SELECT ContactName FROM Customers WHERE CustomerID = '" & Request.Form("CustID") & "'"

攻擊者輸入:' UNION ALL SELECT ContactName FROM Customers WHERE CustomerID <> ''

實際執行:

SELECT ContactName FROM Customers WHERE CustomerID = ''
UNION ALL SELECT ContactName FROM Customers WHERE CustomerID <> ''

導致洩露所有客戶姓名。更嚴重可執行 DROP TABLE、xp_cmdshell 等破壞指令。

防禦三大原則

  1. 參數化查詢 / 預存程序: 永不拼接使用者輸入
    cmd.CommandText = "SELECT ContactName FROM Customers WHERE CustomerID = @CustID"
    cmd.Parameters.Append cmd.CreateParameter("@CustID", adVarChar, , 10, Request.Form("CustID"))
  2. 最小權限原則: 應用程式帳號僅擁有必要權限,禁止 sa、sysadmin、xp_cmdshell
  3. 輸入驗證與清理: 白名單驗證、長度限制、特殊字元過濾(輔助手段,不可替代參數化)

進階防護

  • 錯誤訊息不回傳給前端(避免資訊洩露)
  • 部署 WAF (Web Application Firewall)
  • 定期程式碼審查與滲透測試

加密保護靜態/傳輸中資料,參數化查詢徹底杜絕 SQL 注入,兩者構成資料庫安全防禦的雙重基石。

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