首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

資安專家提煉:開發者必知的 10 大安全防禦技巧

     編輯:VC 教學

核心原則:永遠不信任輸入

所有外部資料 (使用者輸入、網路封包、檔案內容、環境變數) 都可能攜帶惡意負載。**輸入驗證** 是第一道防線,其次是**輸出編碼**、**最小權限**、**纂深度防禦**。

十大技巧詳解

1. 防禦緩衝區溢位

  • C/C++ 高風險:strcpy, sprintf, gets, memcpy 無長度檢查。
  • 安全替代:strncpy_s, snprintf, memcpy_s (C11 Annex K) 或 strlcpy (BSD)。
  • 編譯器防護:啟用 /GS (VC++), -fstack-protector-strong (GCC/Clang)。
  • 範例修正:
// 危險
void Bad(char* src, DWORD len) {
    char dest[32];
    memcpy(dest, src, len);  // len 可能 > 32
}

// 安全
void Good(char* src, DWORD len) {
    const size_t DEST_SZ = 32;
    char dest[DEST_SZ];
    memcpy(dest, src, min(len, DEST_SZ));  // 限制複製長度
    dest[DEST_SZ-1] = '\0';                // 確保結尾
}

2. 防止 SQL 注入

  • **絕不**拼接 SQL 字串:"SELECT * FROM Users WHERE Name='" + name + "'"。
  • **唯一正確方式**:參數化查詢 / 預編譯陳述式。
// ADO.NET 範例
cmd.CommandText = "SELECT * FROM Users WHERE Name=@Name";
cmd.Parameters.AddWithValue("@Name", userName);

3. 防範跨站腳本攻擊 (XSS)

  • 輸出到 HTML 時**必須編碼**:<→&lt;, >→&gt;, "→&quot;, '→&#39;。
  • 使用模板引擎自動編碼 (Razor, Thymeleaf, Jinja2 autoescape)。
  • 設定 Content-Security-Policy 標頭限制腳本來源。

4. 安全儲存密碼

  • **禁用 MD5/SHA1/SHA256 直雜** (太快,易暴力破解)。
  • 使用**慢速雜湊 + 隨機鹽值**:bcrypt (cost 10+), Argon2id, PBKDF2 (100k+ 迭代)。
  • 驗證時:bcrypt_checkpw(input, storedHash)。

5. 最小權限原則

  • 資料庫連線使用最低權限帳號 (僅需 SELECT/INSERT 的帳號,不用 sa/root)。
  • 程式僅請求必要系統權限 (不以 Administrator/root 執行)。
  • 容器/微服務:USER nonroot, cap_drop: ALL。

6. 保護敏感資料傳輸

  • **全站 HTTPS** (TLS 1.2+),啟用 HSTS。
  • Cookie 設定 Secure; HttpOnly; SameSite=Strict。
  • 敏感 API 僅接受 POST,避免查詢字串洩露於日誌/歷史。

7. 錯誤處理不洩露細節

  • 生產環境**關閉詳細錯誤頁面** (如 ASP.NET customErrors=On, PHP display_errors=Off)。
  • 日誌記錄完整堆疊,使用者只見友善提示。

8. 依賴元件管理

  • 定期掃描第三方套件漏洞 (OWASP Dependency-Check, Snyk, GitHub Dependabot)。
  • 鎖定版本 (lockfile),避免自動更新引入破壞性變更或惡意代碼 (supply chain attack)。

9. 記錄與稽核

  • 記錄關鍵操作:登入/登出、權限變更、資料異動、失敗嘗試。
  • 日誌不可竄改 (寫入唯讀存儲、簽名、SIEM 集中收集)。

10. 事件回應準備

  • 制定事件回應手冊:偵測 → 遏制 → 根因分析 → 恢復 → 事後複盤。
  • 定期演練 (Red Team/Blue Team、桌面推演)。

給開發者的檢查清單

  1. 所有輸入是否驗證 (白名單)?
  2. 所有輸出是否編碼 (語境感知)?
  3. SQL 是否 100% 參數化?
  4. 密碼是否用 bcrypt/Argon2?
  5. HTTPS 是否全站強制?
  6. 錯誤頁面是否隱藏堆疊?
  7. 第三方套件是否本月掃描?

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