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 權限測試腳本:嘗試存取其他用戶的訂單、修改其他用戶的資料。」