2025年7月14日 星期一

[研究]ASP.NET WebForm 網站 HCL AppScan 10.18.0 報告【低】【查詢中接受了Body參數】弱點,如何處理?

[研究]ASP.NET WebForm 網站 HCL AppScan 10.18.0 報告【低】【查詢中接受了Body參數】弱點,如何處理?

2025-07-14

ChatGPT 說:

你遇到的是 HCL AppScan 回報的 ASP.NET WebForm 網站中「查詢中接受了 Body 參數」的弱點,這類問題通常屬於資訊洩漏/設計缺陷的低風險弱點,但仍應視情境處理以強化安全性。

🔎 問題說明

報告指出:

  • 風險:當網站在「查詢功能」時仍接受 HTTP POST(Body)參數,若該參數包含敏感資訊(如身分證號、帳號等),可能被誤用或被駭客工具掃出。
  • 原因:Web 應用程式設計上未限制查詢只接受 GET 參數。
  • 嚴重性:低(CVSS 3.7),但視系統設計而定,若牽涉敏感資料,仍具潛在風險。

🧪 AppScan 檢測邏輯

HCL AppScan 模擬使用者發送 POST 請求 至查詢頁面(通常應該是 GET 請求),觀察該頁是否依然接受 POST 參數(也就是 Body 中的參數)並成功查詢資料。

報告中提到:

  • 方法:POST
  • 查詢參數出現在 Body(如 P=PG65337)
  • 表示查詢功能未限制只接受 URL 查詢字串(QueryString)

✅ 解決方案建議(依風險高低選擇)

方案一:強制查詢僅接受 GET 方法

若你的頁面是純查詢,應該不需要 POST 方法:

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.HttpMethod == "POST")
    {
        // 將 POST 轉為 GET 處理,或顯示錯誤
        Response.StatusCode = 405; // Method Not Allowed
        Response.End();
    }
}

或更嚴格地拒絕 POST:

if (Request.HttpMethod != "GET")
{
    Response.StatusCode = 405;
    Response.End();
}

方案二:僅接受特定參數來源

若必須支援 POST(如查詢條件過多),建議檢查參數來源是否來自特定表單欄位,而非任意 Body 參數:

var keyword = Request.QueryString["P"];  
// 不從 Request.Form 讀取

方案三:POST + Anti-CSRF(若非查詢頁)

若是功能性操作(如修改、刪除、需登入),就要加上 CSRF 防護,而不是單靠限制 method。

📌 實務建議

情境建議
查詢頁/報表頁限制只接受 GET,拒絕 POST
查詢條件很多,超出 URL 長度限制使用 POST,但加上參數驗證、來源驗證
查詢功能會查出敏感資料應加強權限驗證、防止 IDOR,同時記錄查詢行為日誌

********************************************************************************

2025-07-16 補,某系統修改後,結果導致登入失敗。


只要畫面中 <form> 有 POST,就不能用上述方法,需依情況尋找其他方法。

(完)


沒有留言:

張貼留言