安全非絕對,而是風險管理。本文建立威脅模型概念:脆弱性 → 威脅 → 攻擊 (Exploit),列舉常見 Web 攻擊類型 (XSS、SQL Injection、CSRF、目錄遍歷、DoS)、對應脆弱性與 ASP.NET 內建/程式碼層面防禦措施。
| 攻擊類型 | 脆弱性來源 | ASP.NET 內建防禦 | 程式碼層面加強 |
|---|---|---|---|
| XSS (跨站腳本) | 輸出未編碼的使用者輸入 | Request Validation (預設開啟)、HttpUtility.HtmlEncode | Razor 自動編碼、AntiXssEncoder、CSP 標頭 |
| SQL Injection | 字串拼接 SQL | 參數化命令 (SqlParameter)、存儲過程 | ORM/Linq to Sql、Entity Framework、禁止動態 SQL |
| CSRF (跨站請求偽造) | 缺乏防偽 Token | @Html.AntiForgeryToken()、ValidateAntiForgeryToken 屬性 | SameSite Cookie、雙重提交 Cookie 模式 |
| 目錄遍歷 | 路徑參數未規範化 | Path.GetFullPath 比對允許根目錄 | 檔案存取白名單、虛擬路徑映射 |
| DoS (阻斷服務) | 資源耗盡 (大檔上傳、複雜查詢) | maxRequestLength、executionTimeout、請求佇列限制 | 速率限制、驗證碼、非同步處理、快取 |
| 資訊洩漏 | 錯誤頁面顯示堆疊追蹤 | customErrors mode="RemoteOnly" | 生產環境關閉 Trace、統一錯誤頁面、日誌脫敏 |
customErrors mode="RemoteOnly" / detailedErrorsForLocalhost="false"debug="false"、trace enabled="false"aspnet_regiis -pef connectionStrings)machineKey 明確設定、非自動生成enableViewStateMac="true"、viewStateEncryptionMode="Auto"forms requireSSL="true"、cookieless="Never"directoryBrowse enabled="false")default.aspx、iisstart.htm) 避免資訊洩漏