水平越权(IDOR)漏洞防护:篡改 ID 查他人数据?数据归属校验 AOP+自动拦截
公司的安全团队做了一次渗透测试,发现一个严重漏洞。订单详情接口 GET /api/order/detail?orderId=1001 没有校验当前用户是否拥有这个订单——把 orderId 改成 1002,就能看到别人的订单。测试人员用脚本遍历了 orderId 从 1 到 50000,抓取了所有订单数据——包括收货地址、手机号、购买记录。 这就是 IDOR(Insecure Direct Object Reference),中文叫"水平越权"。代码里只校验了用户有没有登录,没校验"当前用户是不是这个数据的主人"。同一个权限级别的用户之间,通过篡改 ID 就能看到对方的数据。 今天聊聊怎么用 AOP 在 Controller 层统一做归属校验——不用在每个接口里手写 if (userId != order.getUserId()),一个注解搞定。 问题出在哪 最典型的漏洞代码: @GetMapping("/api/order/detail") public Order detail(@RequestParam Long orderId) { Long userId = getCur....