目录
1.发现问题
当我们添加好用户地址的查、删的功能接口时,发现,正产情况下,登录用户只能查看自己的收货地址或删除自己的收货地址,但是测试发现,只要输入收获地址id竟然都可以查到。这也太可怕了吧!!
2.越权攻击
指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。
3.越权分类
- 1.水平越权
- 攻击者尝试访问与他拥有相同权限的用户的资源
- 例子: A用户可以直接操作到B用户的数据
- 2.垂直越权
- 一个低级别攻击者尝试访问高级别用户的资源
- 例子:普通管理员登录,拼接浏览器地址,直接访问高级管理员的页面
4.越权防范
- 1.防范水平越
- 权建立用户和可操作资源的绑定关系,用户对任何资源进行操作时,通过该绑定关系确保该资源是属于该用户所有的
实战应用
在根据id查看收货地址时,同时校验是否是登陆者,根据拦截器获取threadLocal,进一步获取登录者信息,然后在添加条件时,判断用户id是否一致
/**
* 根据id删除地址
*
* @param addressId
* @return
*/
@Override
public int deleteAddressById(Long addressId) {
//防止水平越权,检验登录者id是否一致
LoginUser loginUser = LoginInterceptor.threadLocal.get();
int rows = addressMapper.delete(new QueryWrapper<AddressDO>().eq("id", addressId).eq("user_id", loginUser.getId()));
return rows;
}