34. 關於應用程式之授權檢查(Authorization Checks)最佳實務,下列何項描述最為適切?
(A) 僅在客戶端(Client-side)執行,以提升使用者體驗
(B) 僅在使用者首次登入時執行一次,以提升伺服器效能
(C) 必須在伺服器端(Server-side)執行,以提昇安全性
(D) 可由使用者自行選擇是否執行,以兼顧便利與安全性

答案:登入後查看
統計: A(6), B(1), C(54), D(7), E(0) #3671720

詳解 (共 1 筆)

#7148877

692bd7f192c4e.jpg

這題的正確答案是 (C) 必須在伺服器端(Server-side)執行,以提昇安全性

 

解析

 

這是軟體安全開發中最關鍵的原則之一:「永遠不要信任客戶端(Never Trust the Client)」

  • 為什麼必須在伺服器端執行 (C)?

    • 伺服器端是唯一使用者無法直接篡改的地方。

    • 無論前端介面如何設計,攻擊者都可以透過攔截封包(使用像 Burp Suite 這樣的工具)或直接呼叫 API 來繞過前端的檢查。因此,每一筆進入後端的請求,伺服器都必須再次驗證「這個人是誰」以及「他有沒有權限做這件事」。

  • 其他選項的錯誤原因:

    • (A) 僅在客戶端 (Client-side) 執行:

      • 這是極度危險的作法。前端的檢查(如隱藏按鈕、JavaScript 驗證)只能作為提升使用者體驗(UI/UX)的手段,無法作為安全防線。攻擊者可以輕易修改瀏覽器的 HTML/JS 或直接送出請求來繞過這些檢查。

    • (B) 僅在使用者首次登入時執行一次:

      • 這會導致「垂直越權」或「水平越權」的風險。如果使用者在登入後,手動修改網址(例如將 ID 從 123 改為 124)去存取別人的資料,若伺服器沒有對每次請求進行檢查,就會發生資料外洩。

    • (D) 可由使用者自行選擇:

      • 資安控制措施不能由使用者決定是否開啟,這違背了安全設計的基本原則。

 

補充概念:不安全的直接物件參考 (IDOR)

 

若未在伺服器端正確執行授權檢查,最常見的漏洞就是 IDOR (Insecure Direct Object References)。例如,使用者 A 只要把網址中的 id=100 改成 id=101,就能看到使用者 B 的訂單,這就是因為伺服器只檢查了「你有沒有登入」,卻忘了檢查「這筆 id=101 的資料是不是屬於你的」。

 

0
0