IDOR 與權限繞過

什麼是 IDOR?

IDOR (Insecure Direct Object Reference) 發生在 API 直接使用使用者提供的 ID 而沒有檢查權限。

攻擊範例

GET /api/orders/123  ← 使用者的訂單 ✅
GET /api/orders/456  ← 修改 ID 就能看到別人的訂單 ❌

Vibe Prompt

「幫我修復這個 IDOR 漏洞:在查詢訂單前先驗證使用者是否擁有該訂單。」

// ❌ 危險寫法
app.get('/api/orders/:id', async (req, res) => {
  const order = await db.query(`SELECT * FROM orders WHERE id = ${req.params.id}`)
  res.json(order)  // 任何人只要改 ID 就能看
})

// ✅ 安全寫法
app.get('/api/orders/:id', async (req, res) => {
  const order = await db.query(
    'SELECT * FROM orders WHERE id = $1 AND user_id = $2',
    [req.params.id, req.user.id]  // 同時驗證使用者
  )
  if (!order) return res.status(404).json({ error: '找不到' })
  res.json(order)
})

Vibe Prompt

「幫我寫一個 API 權限測試腳本:嘗試存取其他用戶的訂單、修改其他用戶的資料。」

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!