访问控制(Access Control)漏洞是 Web 安全中最常见、危害也最大的问题之一(OWASP Top 10 长期位居前列)。核心原则是:确保“主体(用户/系统)只能访问其被授权的资源”。
下面从原理、常见类型、检测方式、防御措施、最佳实践几个方面系统说明如何应对。
访问控制漏洞的本质是:
系统未能正确校验“谁(Who)能做什么(What)、访问哪些资源(Which)”
常见表现:
低权限用户访问高权限功能。
示例
GET /admin/users HTTP/1.1
普通用户访问管理员接口,后端未校验角色。
同权限用户访问其他用户的数据。
示例
GET /api/orders/1001
用户 A 把 1001 改成 1002,看到用户 B 的订单。
通过可预测的资源 ID 直接访问对象。
示例
GET /api/user?userId=123
仅在前端隐藏功能,后端未校验。
示例
POST /api/admin/deleteUser绕过业务流程顺序。
示例
永远不要信任前端
✅ 后端校验
❌ 前端隐藏按钮 / JS 判断
if user.role != ADMIN:
deny
if order.ownerId != user.id:
deny
❌ 直接暴露 DB ID
✅ 使用映射 token
order_id → uuid
或
user_id → session 中存储
@PreAuthorize)✅ 避免每个接口重复、遗漏
GET /api/users/me/orders/{orderId}
而不是:
GET /api/orders/{orderId}
if (!order.getUserId().equals(currentUser.getId())) {
throw new ForbiddenException();
}
| 错误 | 说明 |
|---|---|
| 只在前端控制权限 | 后端未校验 |
| 只校验是否登录 | 未校验角色 |
| 只校验接口 | 未校验数据归属 |
| 使用连续 ID | 易被猜测 |
| 权限逻辑分散 | 易遗漏 |
访问控制漏洞不是“有没有登录”的问题,而是“登录后还能做什么”的问题。
如果你愿意,我也可以:
告诉我你的技术栈即可。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。