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

防範 SQL Injection 的 SQL Server 進階安全設定指南

     編輯:關於SqlServer

前言

SQL Injection 攻擊頻傳,但 SQL Server 2000 通過 C2 安全認證,核心架構安全。關鍵在於正確設定與最小權限原則。

三大防禦層次

1. 修補與隱藏

  • 套用最新 Service Pack (SP3a 以上) 與安全性更新。
  • 變更預設埠 1433,並啟用「隱藏伺服器」選項,阻止列舉發現。
  • TCP/IP 篩選封鎖 1433,增加攻擊者直接連線難度。

2. 資料庫角色與最小權限

攻擊者常測試 IS_SRVROLEMEMBER('sysadmin')、IS_MEMBER('db_owner')。若網站連線使用 sa 或 db_owner,一旦注入成功即可完全控制伺服器。

實作步驟:

  1. 企業管理員 → 資料庫 → 角色 → 新增資料庫角色 (如 WebApp_User)。
  2. 僅授予必要物件權限:
    GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Orders TO WebApp_User;
    GRANT EXECUTE ON dbo.usp_GetOrderDetail TO WebApp_User;
  3. 拒絕危險權限:DENY CREATE TABLE, EXECUTE ON xp_cmdshell TO WebApp_User;
  4. 將網站連線字串的登入帳戶設為此角色成員。

3. 移除/停用危險擴展預存程序

-- 移除 xp_cmdshell
sp_dropextendedproc 'xp_cmdshell';
-- 重命名 xpsql70.dll 防止攻擊者還原
-- 同理處理 xp_regread, xp_regwrite, sp_OACreate 等

程式碼層面補強

  • 一律使用參數化查詢 或預存程序,拒絕動態串接 SQL 字串。
  • 輸入驗證:白名單驗證、長度限制、型別轉換。
  • 錯誤訊息不回傳給前端,避免洩露結構描述資訊。

總結

「修補、隱藏、最小權限、移除危險功能、參數化查詢」五大支柱,構建纵深防禦,讓攻擊者即使發現注入點也無法輕易擴大戰果。

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