各框架對策
ASP.NET Core 的資安對策 — 正式環境錯誤、機密、授權的守法
ASP.NET Core 很穩固,但事故來自設定:正式環境暴露詳細錯誤、機密直接寫進 appsettings,以及漏掉 [Authorize]。隱藏正式環境錯誤、把機密從設定外部載入、把授權寫明確。以防禦視角講解,不含攻擊步驟。
對象:正在 ASP.NET Core 上維運應用程式或 API 的人。這裡不談攻擊步驟,只講如何讓穩固的地基持續生效,同時補起設定所開的破口。想看全貌,請參閱 各框架資安對策的入口。
三大陷阱(開在設定上)
ASP.NET Core 的機制很出色,但下面這三點是要在設定與程式碼裡去守的領域。
① 正式環境暴露詳細錯誤
開發者例外頁面等外洩內部資訊。透過故意的錯誤被抽出。
② appsettings 裡的機密
連線字串/金鑰直接寫死。透過誤提交或暴露而外洩。
③ 漏掉 [Authorize]
忘了加任何人都能到達。也沒有擁有者檢查。
此外,也要留意不安全的反序列化(BinaryFormatter 等)、模型繫結的過度接收(over-posting),以及放任 NuGet 相依套件的 CVE。
補起來的方法(3 步驟)
正式環境隱藏詳細錯誤
機密從設定外部載入
把授權寫明確、切斷危險的輸入路徑
[Authorize] 與擁有者檢查(預設傾向拒絕)。用 DTO 或 [Bind] 限制 over-posting,並別用不安全的格式反序列化不可信的資料。NuGet 相依套件保持 CVE 監控+迅速修補(→ IDOR 是什麼)。常見(危險)
- 正式環境暴露開發者例外頁面
- 機密直接寫進
appsettings.json - 忘了加
[Authorize]、沒有擁有者檢查 - 模型接收所有欄位(over-posting)
正確
- 正式環境隱藏詳細錯誤
- 機密來自 User Secrets/環境變數/Key Vault
- 明確的授權(預設拒絕、擁有者檢查)
- 用 DTO/[Bind] 限制繫結
本站的觀點:即使地基穩固,設定與授權仍在你身上
ASP.NET Core 具備完善的認證、授權與資料保護機制,但正式環境設定與套用授權是要按環境、按端點各自做對的事。本站是不同的技術棧,但原則相同:正式環境不外洩內部資訊、把機密放在設定外部、在公開入口一定要寫授權、對相依套件監控 CVE。穩固地基的價值,唯有在設定正確與授權明確之下才發揮得出來。
接下來讀
- 入口:各框架資安對策(入口) · Spring Boot 資安對策(同為企業級、相依套件/授權的型態相近)
- 機密:別把機密資訊放進公開目錄 · 實務:漏洞應變實務手冊
- 名詞:IDOR 是什麼 · RCE 是什麼
FAQ
QASP.NET Core 安全嗎?
ASP.NET Core 是成熟穩固的地基,具備完善的認證、授權與資料保護(Data Protection)機制。用得正確它很強大,但事故不是來自核心,而是來自設定。正式環境暴露詳細錯誤、把機密直接寫進 appsettings、忘了加授權屬性,與其說是框架特有的問題,不如說是反覆發生的設定/維運問題。
Q機密(連線字串、API 金鑰)該放哪裡?
原則是:不要直接寫進 appsettings.json。開發時用 User Secrets;正式環境從環境變數或雲端機密管理(例如 Key Vault)載入。appsettings.json 容易被納入版本庫,也容易透過公開目錄或誤提交而外洩。萬一外洩,要立刻輪替連線字串或金鑰。
Q要怎麼防止忘記加授權屬性?
在控制器或端點上忘了加 [Authorize],任何人都能不經驗證就到達。把預設傾向『拒絕』(用 fallback policy 擋掉未驗證的請求)、以角色/政策為基礎把權限寫明確、並寫上資源擁有者的檢查。別停在『已登入=允許』——連操作目標的擁有者也要驗證。