【异常】解决springboot项目shiro框架下的AppScan漏洞会话标识未更新问题

简介: 解决springboot项目shiro框架下的AppScan漏洞会话标识未更新问题

最近做的一个springboot项目 + shiro框架,在做安全漏洞检查时爆出了一个安全漏洞:会话标识未更新。用的扫描工具是IBM的AppScan。

要解决会话标识未更新的安全问题,就需要在做登录验证时生成新的session,所以需要先将原来的session失效。  


一般的解决方法如下:

publicvoidlogin(HttpServletRequestrequest, ...){
// 让旧session失效request.getSession(true).invalidate();
//登录验证    }

还有一种方案:

在登录页面上加上一段代码:request.getSession().invalidate();//清空sessionCookiecookie=request.getCookies()0;//获取cookiecookie.setMaxAge(0);//让cookie过期

然后用户再输入信息登录时,就会产生一个新的session了。

--------------------------------------------------------------------------------------------------------

但是,如果使用了shiro框架,这样做会报错:...httpSession has been already invalidated。原因是shiro对HttpSession进行了一层包装,你直接让原生的session失效,没有通知shiro,shiro再去使用session时就会报错了。

最终的解决方法,不要使用原生的失效方法,而是使用shiro自己提供的api方法:

SecurityUtils.getSubject().logout();

最终方案如下:

publicMap<String, Object>login(HttpServletRequestrequest, Stringusername, Stringpassword) {
// 让旧session失效,这一句代码一定要放在登录验证的最前面SecurityUtils.getSubject().logout();
// 登录验证        ......
    }

本次针对 Appscan漏洞 会话标识未更新进行总结,如下:

1.1、攻击原理

在认证用户或者以其他方式建立新用户会话时,如果不使任何现有会话标识失效,攻击者就有机会窃取已认证的会话,此漏洞可结合XSS获取用户会话对系统发起登录过程攻击。

1.2、APPSCAN测试过程

AppScan会扫描“登录行为”前后的Cookie,其中会对其中的会话信息进行记录,在登录行为发生后,如果cookie中这个值没有发生变化,则判定为“会话标识未更新”漏洞。

1.3、修复建议(目前只是Apache Shiro安全框架下的修复建议)

若使用的是Apache Shiro安全框架,可使用SecurityUtils.getSubject().logout()方法,参考:http://blog.csdn.net/yycdaizi/article/details/45013397



本文首发于CSDN,为博主原创文章,如果需要转载,请注明出处,谢谢!


完结!

相关文章
|
20天前
|
Web App开发 编解码 Java
B/S基层卫生健康云HIS医院管理系统源码 SaaS模式 、Springboot框架
基层卫生健康云HIS系统采用云端SaaS服务的方式提供,使用用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、智能化、扩展化等设计方法,覆盖了基层医疗机构的主要工作流程,能够与监管系统有序对接,并能满足未来系统扩展的需要。
46 4
|
1月前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
1天前
|
XML Java 数据库连接
Spring框架与Spring Boot的区别和联系
Spring框架与Spring Boot的区别和联系
8 0
|
4天前
|
Java
springboot项目出现Exception in thread “main“ java.lang.NoClassDefFoundError: javax/servlet/Filter
springboot项目出现Exception in thread “main“ java.lang.NoClassDefFoundError: javax/servlet/Filter
12 0
|
5天前
|
Java Spring
Spring boot项目如何发送邮件
Spring boot项目如何发送邮件
15 2
|
10天前
|
存储 Java 应用服务中间件
Springboot项目打war包部署到外置tomcat容器【详解版】
该文介绍了将Spring Boot应用改为war包并在外部Tomcat中部署的步骤:1) 修改pom.xml打包方式为war;2) 排除内置Tomcat依赖;3) 创建`ServletInitializer`类继承`SpringBootServletInitializer`;4) build部分需指定`finalName`;5) 使用`mvn clean package`打包,将war包放入外部Tomcat的webapps目录,通过startup脚本启动Tomcat并访问应用。注意,应用访问路径和静态资源引用需包含war包名。
|
11天前
|
SQL Java 数据库连接
Springboot框架整合Spring JDBC操作数据
JDBC是Java数据库连接API,用于执行SQL并访问多种关系数据库。它包括一系列Java类和接口,用于建立数据库连接、创建数据库操作对象、定义SQL语句、执行操作并处理结果集。直接使用JDBC涉及七个步骤,包括加载驱动、建立连接、创建对象、定义SQL、执行操作、处理结果和关闭资源。Spring Boot的`spring-boot-starter-jdbc`简化了这些步骤,提供了一个在Spring生态中更便捷使用JDBC的封装。集成Spring JDBC需要添加相关依赖,配置数据库连接信息,并通过JdbcTemplate进行数据库操作,如插入、更新、删除和查询。
|
11天前
|
SQL Java 数据库连接
Springboot框架整合Spring Data JPA操作数据
Spring Data JPA是Spring基于ORM和JPA规范封装的框架,简化了数据库操作,提供增删改查等接口,并可通过方法名自动生成查询。集成到Spring Boot需添加相关依赖并配置数据库连接和JPA设置。基础用法包括定义实体类和Repository接口,通过Repository接口可直接进行数据操作。此外,JPA支持关键字查询,如通过`findByAuthor`自动转换为SQL的`WHERE author=?`查询。
|
11天前
|
Java
SpringBoot 项目启动初始化一个Map对象到内存
SpringBoot 项目启动初始化一个Map对象到内存
|
16天前
|
Java Docker 容器
SpringBoot项目集成XXL-job
SpringBoot项目集成XXL-job