2025年7月7日 星期一

[研究]ASP.NET WebForm 網站用 HCL AppScan 10.18.0 掃描後,報告【發現資料庫錯誤模式】弱點,如何處理?

[研究]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 訊息,就不會有這個弱點。

(完)

相關

沒有留言:

張貼留言