横向越权:横向越权指的是攻击者尝试访问与他拥有相同权限的用户的资源

纵向越权:纵向越权指的是一个低级别攻击者尝试访问高级别用户的资源

对于纵向越权,我们可以通过设置用户角色,为不同的角色提供不同的权限来避免。

对于横向越权,就比较麻烦了,横向越权可能出现的场景有:在用户忘记密码重置密码时,回答对了问题进入密码重置阶段时,如果知道其他用户的用户名,很容易改变此用户的密码,然后就可以进行越权访问了。

这种情况下为了防止横向越权,我们可以使用缓存来进行辅助,当问题回答正确时,我们在缓存中存储一对由用户名和一个唯一的数字组成的数据,然后返回放入的唯一数据。在重置密码时我们的参数不仅需要用户名和密码还需要前面生成的唯一数字,根据用户名在缓存中取出对应的数字,如果取出的数字和参数中传入的想等,则证明重置的当前用户的密码,否则不是,且不予以重置。

重置密码回答问题

public ServerResponsecheckAnswer(String username, String question, String answer){int resultCount =userMapper.checkAnswer(username, question, answer);if(resultCount>0){//说明问题及问题答案是用户的,并且是正确的

String forgetToken =UUID.randomUUID().toString();//放入缓存

TokenCache.setKey(TokenCache.TOKEN_PREFIX+username, forgetToken);returnServerResponse.createBySuccess(forgetToken);

}return ServerResponse.createByError("用户答案错误");

}

重置密码

public ServerResponseforgetResetPassword(String username, String passwordNew, String forgetToken){if(StringUtils.isBlank(forgetToken)){return ServerResponse.createByError("参数错误,Token需要传递");

}

ServerResponse validResponse= this.checkValid(username, Const.USERNAME);if(validResponse.isSuccess()){return ServerResponse.createByError("用户不存在");

}//使用Cache而不使用session是因为当应用程序结束时,如果缓存的失效时间未到,则下次启动程序时,缓存数据依然存在//但是Seesion中的数据只保存在一次会话中,session容易丢失不够安全,而Cache不会出现这种问题

String token = TokenCache.getKey(TokenCache.TOKEN_PREFIX+username);if(StringUtils.isBlank(token)){

ServerResponse.createByError("token无效或过期");

}if(StringUtils.equals(token, forgetToken)){

String md5Password=MD5Util.MD5EncodeUtf8(passwordNew);int resultCount =userMapper.updatePasswordByUsername(username, md5Password);if(resultCount>0){return ServerResponse.createBySuccess("修改密码成功");

}

}else{return ServerResponse.createByError("token错误,请重新获取修改密码的token");

}return ServerResponse.createByError("密码更新失败");

java项目横向越权_横向越权、纵向越权问题解决相关推荐

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. java项目经验行业_行业研究以及如何炫耀您的项目

    java项目经验行业 苹果 | GOOGLE | 现货 | 其他 (APPLE | GOOGLE | SPOTIFY | OTHERS) Editor's note: The Towards Data ...

  3. hadoop创建java项目的步骤_为 Apache Hadoop 创建 Java MapReduce - Azure HDInsight | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 为 HDInsight ...

  4. 用Java制作左右横向柱状图_横向柱状图

    Echarts绘制横向柱状图(圆角+渐变) var myChart = echarts.init(document.getElementById('main'));//初始化数据 var catego ...

  5. java项目红叉_完美解决Eclipse导入的项目上有个红叉,但不影响项目运行的问题

    从别的eclipse导了个项目,导入后项目文件夹上显示一个红叉,但项目能跑通.检查了jdk.tomcat版本,都改正正确了,项目目录树里面每个文件夹里面的文件,src.xml都查了,都没发现问题. 后 ...

  6. idea创建java项目目录结构_用IDEA创建一个简单的Maven的JavaWeb项目

    1.项目环境 IDEA:2016.2 JDK:1.8.0_76 Maven:3.2.5 2.File-->New-->Project-->Maven 3.选择Project SDK: ...

  7. java项目总结范文_第一次java项目个人总结

    个人总结 在这次项目之前,因为个人状态和心态的原因,从gui课程开始便基本处于神游的状态,状态上体现在上课精力不能集中犯困,心态上体现在明知道自己没学懂也没有主动去问休息时也没有去练习解决问题. 这样 ...

  8. java项目配置过滤器_在JavaWeb项目中如何正确的使用Filter过滤器

    在JavaWeb项目中如何正确的使用Filter过滤器 发布时间:2020-11-11 17:12:00 来源:亿速云 阅读:79 作者:Leah 这期内容当中小编将会给大家带来有关在JavaWeb项 ...

  9. 大学生java项目创意申请表_基于java ee的大学生作品展示系统.pdf

    基于java ee的大学生作品展示系统.pdf 还剩 4页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 第34卷第3期 2015年6月 南昌工程学院学 ...

最新文章

  1. VTK:Shaders之BozoShader
  2. 共享内存中使用指针_详解c++中字符指针数组的使用
  3. 自动化测试框架:没有Surprise的原因
  4. 《飞鸽传书》把写程序和文学创作相提并论
  5. vuejs路由插件:vue-router的工作原理
  6. iTerm – 让你的命令行也能丰富多彩
  7. 中国双面柔性印刷电路板(FPC)市场趋势报告、技术动态创新及市场预测
  8. frame框架左右展开收缩(上下左右,其中左右可收缩)
  9. jQuery插件——自定义jQuery插件
  10. 《机器视觉算法与应用》第3章 机器视觉算法之图像分割——学习笔记
  11. 数学建模专栏 | 第十一篇:MATLAB CUMCM真题求解实例二:优化型
  12. 点击微信公众号菜单发送图片或文本
  13. 计算机网络(第八版)谢希仁
  14. 软件能力成熟度模型CMM
  15. ORGE之GUI Demo
  16. 005_Sketch 工具使用手册
  17. 程序人生-hit计统大作业
  18. 快速生成不重复的卡号
  19. ubuntu 刷新频率 如何查看_Ubuntu分辨率和刷新频率设置
  20. jvm的及时编译器JIT

热门文章

  1. 【CF 应用开发大赛】副食品进销存系统
  2. 用CFileFind类实现的目录树遍历
  3. Python中文编码的问题(UTF-8和CP936的区别)
  4. python集合操作班级干部竞选_小学生班级干部竞选稿(精选5篇)
  5. SERP调用企业微信API接口,发送文本信息实例
  6. 区块链的技术创新才是王道|筱静观察2019第8期
  7. Apache PDFBox 居中文本 PDF 文档示例
  8. Zbit ZB25LQ128BSIG 128M flash 集成电路
  9. 创意电子学小知识:功率
  10. 已解决if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: