横向越权
横向越权就是:相同权限等级的用户,非法访问了本不该属于他的其他用户的私有资源或数据。
举例说明
⚙️ 用户信息篡改漏洞
① 漏洞代码
后端直接使用前端传入的用户ID修改数据,未校验归属权,比如只要登录了就可以调用这个接口
@PostMapping("/updateUser")
public void updateUser(String userId, UserDTO dto) {
userService.update(userId, dto); // 直接使用前端传入的userId
}
② 攻击方式
用户A(ID=1001)将自己的请求 POST /updateUser?userId=1001 中的 userId 改为1002,即可修改用户B的数据
③ 修复方案
// 从会话获取当前用户ID
String currentUserId = SecurityContext.getUser().getId();
userService.update(currentUserId, dto); // 强制绑定当前用户
📦订单详情泄露
① 漏洞代码
系统提供订单详情查询接口,SQL查询直接拼接用户输入,没有校验用户ID,即只要登录了就可以传入订单id查询对应订单信息
String sql = "SELECT * FROM orders WHERE order_id = " + request.getParameter("orderId");
② 攻击方式
用户A(订单ID=123)修改参数为 orderId=124,即可查看用户B的订单详情
③ 修复方案
查询订单时带上用户ID,即不仅校验用户是否登录,还要校验订单是否是该用户的订单
String currentUserId = getCurrentUserId();
String sql = "SELECT * FROM orders WHERE order_id = ? AND user_id = ?";
preparedStatement.setString(1, orderId);
preparedStatement.setString(2, currentUserId); // 绑定当前用户
类似的还有订单删除等,也是一样
📁文件下载越权
① 漏洞代码
文件路径由前端传入
@GetMapping("/download")
public void downloadFile(String filePath, HttpServletResponse response) {
FileUtils.copyFile(new File(filePath), response.getOutputStream());
}
② 攻击方式
用户A通过修改 filePath=…/userB/contract.pdf 下载他人文件
③ 修复方案
将文件ID与用户绑定,通过数据库查询真实路径
String fileId = request.getParameter("fileId");
File file = fileService.getFile(fileId, getCurrentUserId()); // 校验归属
945

被折叠的 条评论
为什么被折叠?



