Role Parameter Tampering
有些系统从请求参数中获取用户角色,而不是从服务端 session 获取。
攻击者可以修改请求参数,伪造成管理员角色!
💡 以普通用户登录,然后选择伪造角色为 admin,观察是否能执行管理员操作。
// ❌ 有漏洞:从请求参数获取角色
router.post('/action', (req, res) => {
const { action, role } = req.body
// 信任客户端传来的 role
const userRole = role || currentUser.role
if (hasPermission(userRole, 'manage:users')) {
// 执行敏感操作
}
})
// ✅ 安全:从 session 获取角色
router.post('/action', (req, res) => {
const { action } = req.body
// 忽略客户端传的 role,从 session 获取
const userRole = currentUser.role
if (hasPermission(userRole, 'manage:users')) {
// 执行敏感操作
}
})
// 正常请求
POST /api/action
{ "action": "删除用户" }
// 攻击请求(伪造角色)
POST /api/action
{ "action": "删除用户", "role": "admin" } ← 添加 role 参数