[研究]ASP.NET WebForm 網站用 HCL AppScan 10.18.0 掃描後,報告【發現資料庫錯誤模式】弱點,如何處理?
2025-07-07
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20
********************************************************************************
ASP.NET WebForm 網站用 HCL AppScan 10.18.0 掃描後,報告【發現資料庫錯誤模式】弱點,如何處理?
ChatGPT 說:
針對您提供的 HCL AppScan 報告「發現資料庫錯誤模式」(Database Error Pattern) 弱點,這類問題通常是 ASP.NET WebForm 頁面未正確處理 SQL 例外,導致:
1.攻擊風險:攻擊者透過參數注入觸發 SQL 錯誤,從回應內容看到詳細 SQL 錯誤訊息,例如:
- System.Data.SqlClient.SqlException: 字串轉換失敗
- 堆疊追蹤 (Stack Trace) 暴露:
- 檔案路徑
- 函式名稱
- 程式碼行號
2.攻擊者可藉此推測:
- 資料庫類型 (SQL Server)
- 程式內部結構與路徑
- 可能的注入點
【改善建議】
1. 關閉詳細錯誤顯示
Web.Config 設定:
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="ErrorPage.aspx" />
<compilation debug="false" />
</system.web>
</configuration>
|
customErrors mode="On":正式機開啟,轉向通用錯誤頁。
debug="false":避免輸出詳細堆疊追蹤。
2. 程式碼補強例外處理
不安全範例:
conn.Open(); // 發生例外會直接輸出堆疊 |
建議改寫:
try
{
conn.Open();
}
catch (SqlException ex)
{
// 記錄內部日誌
LogError(ex);
// 回應使用者通用錯誤訊息
Response.Redirect("ErrorPage.aspx");
}
|
3. 避免 SQL Injection
請搭配:
- 使用 SqlParameter 參數化查詢
- 禁止直接拼接 SQL 字串
4. 通用錯誤頁設計 (ErrorPage.aspx)
提供統一友善訊息:
<p>系統忙碌或發生錯誤,請稍後再試,謝謝!</p> |
切勿在頁面中顯示 Exception 細節。
5. 測試驗證
- AppScan 再掃描,確認已無資料庫錯誤模式曝光。
- 針對異常輸入測試,確認網站回應不再洩露:
- SQL 錯誤訊息
- 堆疊追蹤
- 內部路徑
【補充】
若需區分環境:
<customErrors mode="RemoteOnly" defaultRedirect="ErrorPage.aspx" />
|
- 本機開發機可看錯誤
- 外部用戶看不到詳細錯誤
********************************************************************************
其實因為敝人掃描的是開發機、Deploy時候使用 Debug Mode,而非 Release Mode,改成 Deploy 用 Release Mode 的 Binary 應該可以避免直接顯示 Exception 訊息,就不會有這個弱點。
(完)
相關

沒有留言:
張貼留言