ASP.NET (特別是 2.0+) 內建多層防禦機制,配合安全編碼習慣可構建強韌應用。本文盤點核心內建功能、常見攻擊向量與對應防禦清單。
| 攻擊類型 | ASP.NET 內建防禦 | 開發者行動 |
|---|---|---|
| XSS (跨站腳本) | 請求驗證 (validateRequest="true")、輸出編碼 (HttpUtility.HtmlEncode, <%: %>)、AntiXSS Library |
永不關閉請求驗證、所有輸出經編碼、使用 <%: %> 取代 <%= %> |
| SQL 注入 | 參數化命令 (SqlParameter)、Entity Framework / Dapper ORM |
嚴禁字串拼接 SQL、所有輸入走參數、最小權限資料庫帳號 |
| CSRF (跨站請求偽造) | ViewStateMac (enableViewStateMac="true")、AntiForgeryToken (@Html.AntiForgeryToken() MVC) |
所有 POST 表單加入 AntiForgeryToken、驗證 ValidateAntiForgeryToken |
| Session 劫持 | HttpOnly Cookie (httpOnlyCookies="true")、SSL 強制 (requireSSL="true")、SessionID 重生成 |
全站 HTTPS、Cookie 設 HttpOnly/Secure/SameSite、登入後重新產生 SessionID |
| 隱藏欄位竄改 | ViewState 簽章/加密、ControlState | 敏感資料勿放隱藏欄位、改用 Server-Side State (Session/Cache/DB) |
| 一次點擊 | X-Frame-Options: DENY、CSP frame-ancestors 'none' |
全站啟用反嵌入標頭、敏感操作要求再次驗證 |
<system.web>
<httpRuntime requestValidationMode="4.5" enableVersionHeader="false" />
<pages validateRequest="true" enableViewStateMac="true" viewStateEncryptionMode="Auto" />
<httpCookies httpOnlyCookies="true" requireSSL="true" sameSite="Strict" />
<authentication mode="Forms">
<forms requireSSL="true" slidingExpiration="true" timeout="20" />
</authentication>
</system.web>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
<add name="X-Content-Type-Options" value="nosniff" />
<add name="Strict-Transport-Security" value="max-age=31536000" />
</customHeaders>
</httpProtocol>
</system.webServer>
內建功能是地基,安全編碼是樑柱,持續運維是屋頂——三者缺一不可。