首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

撰寫更安全程式碼的 8 個核心習慣

     編輯:關於.NET

前言

安全軟體的建構不靠銀彈,靠的是開發者的日常習慣。以下整理自數千位優秀開發者的共同特質,助你打造更安全的代碼。

習慣 1:勇於負責

產品安全性最終由撰寫代碼的你負責。工具 (靜態分析、編譯器警告) 只能輔助,無法取代人腦判斷。請務必:

  • 親自審查所有代碼,假設所有輸入都會被攻擊。
  • 邀請安全專家進行專業代碼審查,而非泛泛之談。
  • 善用所有可用資源:最高警告等級編譯 (/W4、-Wall)、靜態分析工具、防禦性語言結構 (如 C# checked 關鍵字防整數溢位)。

習慣 2:永不信任輸入

所有輸入在驗證通過前均視為惡意。CVE 數據顯示 47% 漏洞源於輸入信任問題 (緩衝區溢位、SQL 注入、XSS、XPath/LDAP 注入)。

防禦三原則:

  1. 白名單驗證:只接受已知合法格式 (如正則表達式限制),而非黑名單過濾已知惡意字元。
  2. 拒絕可疑輸入:檔名含 ..、| 等直接拒絕,回應通用錯誤訊息 (「找不到檔案」) 而非洩露內部邏輯。
  3. 輸出編碼:Web 應用輸出不可信資料前務必 HTML 編碼,防 XSS。

習慣 3:建立威脅模型

威脅模型不僅用於設計階段,更能指導代碼審查重點:

  • 識別資料來源:遠端/本地、匿名/認證用戶/管理員。
  • 遠端匿名可存取的代碼路徑需最嚴格審查、最多防禦層。
  • 高價值資料 (商業機密、PII) 必須有額外保護措施 (加密、存取控制、稽核)。
  • 沿著匿名資料路徑追蹤代碼,檢查每個處理節點的正確性。

習慣 4:保持領先

威脅日新月異,必須持續學習:

  • 定期閱讀軟體安全經典著作。
  • 訂閱 Bugtraq (securityfocus.com) 等漏洞資訊,設規則歸類處理。
  • 從自己與他人的錯誤中學習,建立組織知識庫。

習慣 5:實施模糊測試

模糊測試 (Fuzzing) 以大量異常輸入觸發崩潰,發現可靠性錯誤 (約 1% 可演變為安全漏洞)。

  • 所有解析檔案格式、網路封包的代碼必須經過模糊測試 (建議 10 萬次迭代)。
  • 崩潰不等於單純拒絕服務,可能隱藏任意代碼執行風險 ——「今天的 DoS 是明天的 RCE」。
  • 微軟 SDL 要求對所有解析器進行檔案格式模糊測試,並提供工具與原始碼。

習慣 6:拒絕寫入不安全代碼

品質把關 (Quality Gate) 機制:

  • 代碼提交前必須通過靜態分析工具掃描,零警告才能入庫。
  • 禁用危險函數:strcpy, strncat 等 (微軟禁用 100 多個 CRT 函數)。
  • 禁用弱加密演算法:DES、MD4、MD5 (除非標準強制)。
  • 避免重複造輪子:共用經驗證的解析庫,減少攻擊面。
  • 工具不能替代安全教育,開發者必須深入理解原理。

習慣 7:認清攻防非對稱性

攻擊者只需找到一個漏洞,防禦者必須修補所有漏洞,且受預算、相容性、時程限制。策略:

  • 定期審查舊代碼,修復歷史安全債。
  • 採用靈活開發流程時,安排專人重構舊模組至新標準。
  • 淘汰不再維護的不安全功能,而非繼續打補丁。

習慣 8:善用最佳工具

  • 靜態分析工具能快速掃描海量代碼,量化風險熱點。
  • 最高警告等級編譯:大量警告往往暗示潛在邏輯錯誤,需優先審查。
  • 工具是加速器,非替代品 —— 結合人工審查與自動化掃描達到最佳效果。

總結

這八個習慣不會讓你瞬間成為安全大師,但能構建持續改進的安全文化。從今天開始,對自己的代碼負責,不信任任何輸入,建立威脅模型,保持學習,模糊測試,拒絕不安全寫法,審視舊代碼,善用工具。

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