guns shiro 升级

背景

之前使用guns做的项目中,由于使用的是shiro,并且使用的是它默认的AES加密公共密钥,所以,存在安全性问题。

解决

首先,需要先对shiro的版本进行升级,如果之前使用的是shiro 1.2.4之前的版本,那么会存在反序列化安全性问题。

在1.2.4版本之前,shiro问题如下。
当浏览器发送remember Me Cookie的请求时,服务端的流程如下。
读取cookie -> base64解码 -> AES解密 -> 反序列化。

在1.2.4版本之前,这个AES加密的密钥是预设好的kPH+bIxk5D2deZiIxcaaaA== 并且,没有通过其他的方式来设置这个秘钥。是一个预设值。
此时,由于,我们知道这个这个加密密钥,所以,破解过程如下。
因为,我们知道了AES密钥,所以,我们可以生成任意我们想要的Cookie。

那么,在1.2.4版本之后,这个预设的密钥就删除掉了。需要用户自己进行设置。但是,又产生了一个问题,像guns这种系统密钥是设定死了,直接在guns中能够找到。而关键代码可以在github 上通过api search接口搜索到,从而得到一个所谓的key包,就是这些密钥的集合,然后用这些公开的密钥去轮流尝试,如果用guns框架的话,就会导致密钥泄漏。

所以,这个密钥不能被泄漏。
在这里插入图片描述
我使用了公共密钥+加随机数的方式来生成密钥。这样保证了每次bean初始化的时候 对称密钥是不一样的。

总结

第一,可以把当前shiro的版本进行升级,可以升级到1.7.0
第二,AES加密密钥要进行更改,新的密钥不要被别人获取到。

相关链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
具体详情 https://gitee.com/wuburen/guns #Guns V2.1 新版Guns基于SpringBoot全面升级,完美整合springmvc + shiro + mybatis-plus + beetl! 在不用写xml配置(V1.0)的基础上进一步简化项目配置,让您更专注于业务开发!抛弃传统spring xml的配置方式,利用springboot + javabean方式配置spring,极大简化了pom.xml配置和spring配置. Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架. 如果您不喜欢用SpringBoot,或者您是一个spring初学者,您可以切换到Guns V1.0(点击这里)分支, Guns V1.0基于spring的java bean方式配置项目,同样简洁易上手. 注:SpringBoot强大的Auto Config和统一的依赖管理极大的简化了spring配置和maven依赖,在不了解其都配置了哪些东西的基础上可能会对初学者有一定困扰,所以建议初学者先看Guns V1.0 ##功能 简介 用户管理 角色管理 部门管理 菜单管理 字典管理 业务日志 登录日志 监控管理 通知管理 代码生成 ##使用说明 导入sql/guns.sql文件到mysql数据库 以maven方式导入项目到ide 修改application.yml中的数据库相关的配置,改为您本机的数据库配置 启动项目,管理员账号admin/密码111111 ###如何启动项目 Guns目前支持三种启动方式: 在IDE里运行GunsApplication类中的main方法启动 执行如下maven命令 clean package -Dmaven.test.skip=true 并从target目录中找到guns-1.0.0-SNAPSHOT.jar,并在jar包的目录下执行如下java命令 java -jar guns-1.0.0-SNAPSHOT.jar 修改pom.xml中如下片段 <packaging>jar</packaging> 改为 <packaging>war</packaging> 并打包放入到tomcat中执行 ##所用框架 ###前端 Bootstrap v3.3.6 jQuery v2.1.4 bootstrap-table v1.9.0 layer v2.1 zTree core v3.5.28 WebUploader 0.1.5 ###后端 SpringBoot 1.5.3.RELEASE MyBatis-Plus 2.0.8 MyBatis 3.4.4 Spring 4.3.8.RELEASE Beetl 2.7.15 hibernate-validator 5.3.5.Final Ehcache 3.3.1 Kaptcha 2.3.2 Fastjson 1.2.31 Shiro 1.4.0 Druid 1.0.31 ##项目包结构说明 ├─main │ │ │ ├─java │ │ │ │ │ ├─com.stylefeng.guns----------------项目主代码 │ │ │ │ │ │ │ ├─common----------------项目公用的部分(业务中经常调用的类,例如常量,异常,实体,注解,分页类,节点类) │ │ │ │ │ │ │ ├─config----------------项目配置代码(例如mybtais-plus配置,ehcache配置等) │ │ │ │ │ │ │ ├─core----------------项目运行的核心依靠(例如aop日志记录,拦截器,监听器,guns模板引擎,shiro权限检查等) │ │ │ │ │ │ │ ├─modular----------------项目业务代码 │ │ │ │ │ │ │ ├─GunsApplication类----------------以main方法启动springboot的类 │ │ │ │ │ │ │ └─GunsServletInitializer类----------------用servlet容器启动springboot的核心类 │ │ │ │ │ └─generator----------------mybatis-plus Entity生成器 │ │ │ ├─resources----------------项目资源文件 │ │ │ │ │ ├─gunsTemplate----------------guns代码生成模板 │ │ │ │ │ ├─application.yml----------------springboot项目配置 │ │ │ │ │ ├─ehcache.xml----------------ehcache缓存配置 │ │ │ └─webapp----------------web页面和静态资源存放的目录 │ 注:SpringBoot项目默认不支持将静态资源和模板(web页面)放到webapp目录,但是个人感觉resources目录只放项目的配置更加简洁,所以就将web页面继续放到webapp目录了.
根据提供的引用内容,我们可以得知guns redis集群的实现需要进行以下两个步骤: 1.在命令行中启动redis集群,具体步骤如下: ```shell # 下载redis源码 wget http://download.redis.io/releases/redis-5.0.5.tar.gz # 解压 tar xzf redis-5.0.5.tar.gz cd redis-5.0.5 # 编译 make # 启动redis集群 ./src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 ``` 2.修改guns项目的配置文件,使其支持redis集群。具体步骤如下: 修改guns\guns-admin\src\main\resources\application.yml文件,添加以下配置: ```yaml spring: redis: cluster: nodes: - 127.0.0.1:7000 - 127.0.0.1:7001 - 127.0.0.1:7002 - 127.0.0.1:7003 - 127.0.0.1:7004 - 127.0.0.1:7005 ``` 修改guns\guns-admin\src\main\java\com\stylefeng\guns\config\web\WebConfig.java文件,启用RedisHttpSession: ```java @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Bean public RedisHttpSessionConfiguration redisHttpSessionConfiguration() { RedisHttpSessionConfiguration configuration = new RedisHttpSessionConfiguration(); configuration.setMaxInactiveIntervalInSeconds(1800); return configuration; } @Bean public JedisConnectionFactory connectionFactory() { JedisConnectionFactory connection = new JedisConnectionFactory(); connection.setHostName("127.0.0.1"); connection.setPort(6379); return connection; } @Bean public HttpSessionStrategy httpSessionStrategy() { return new HeaderHttpSessionStrategy(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值