【重要通知】使用 OneBlog(DBlog)的用户,请注意!!!
使用 OneBlog(DBlog)的用户,请注意!!!
各位正在使用 OneBlog[1](DBlog)的用户,请注意,本篇文章非常重要,请一定要认真读完!
OneBlog 中使用了 Shiro 权限管理框架,版本为:
<shiro.spring.version>1.4.0</shiro.spring.version>
该版本针对 CookieRememberMeManager
存在一个反序列化的漏洞:
•原文:https://issues.apache.org/jira/browse/SHIRO-550•相关模拟:https://blog.csdn.net/Dothwinds/article/details/105244830
OneBlog 是我18年的时候开发出的一款博客系统,当时我在开发 OneBlog 时其实已经考虑到了这一点(当时没有考虑太深),因此给项目重新生成了一个 Key,并且想当然的在源码中给出了注释,如下:
但由于当时太天真,没有考虑到用户群体的复杂性,想当然的以为用户在用的时候一定会看源码(实际情况,除了专门研究源码的人,没有多少使用者会深究你的代码),因此也没有在文档中说明。
今日收到一位从事安全研究行业的朋友的提示,所以紧急修复一版:
在此给各位造成的不便,深表歉意。
升级方式:
• 如果本地代码未做过多修改,可以直接 git pull
拉取最新代码• 如果你已经做了不少定制开发,可以按照以下步骤操作:
在 blog-admin/src/main/java/com/zyd/blog/core/config/ShiroConfig.java
配置类中,增加以下内容:
/**
* 解决 shiro 反序列化漏洞
*
* https://blog.csdn.net/qq_34775355/article/details/106643678
*/
public static class GenerateCipherKey {
/**
* 随机生成秘钥,参考org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey(int)
*
* @return byte[]
*/
public static byte[] generateNewKey() {
KeyGenerator kg;
try {
kg = KeyGenerator.getInstance("AES");
} catch (NoSuchAlgorithmException var5) {
String msg = "Unable to acquire AES algorithm. This is required to function.";
throw new IllegalStateException(msg, var5);
}
kg.init(128);
SecretKey key = kg.generateKey();
return key.getEncoded();
}
}
然后修改 rememberMeManager
方法:
/**
* cookie管理对象;记住我功能
*
* @return
*/
public CookieRememberMeManager rememberMeManager() {
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
cookieRememberMeManager.setCookie(rememberMeCookie());
// 主要是这个地方,使用上面定制的 key 生成器生成随机 key
cookieRememberMeManager.setCipherKey(GenerateCipherKey.generateNewKey());
return cookieRememberMeManager;
}
或者直接 copy ShiroConfig.java[2] 中的代码覆盖你本地的相关代码。
最后,最好将 shiro 升级到最新版本,项目根目录下的 pom.xml
文件中,升级 shiro 相关的依赖:
<shiro.spring.version>1.7.1</shiro.spring.version>
PS: 呼吁各位使用 shiro 框架的开发者或者开源项目作者,自行检阅自己的项目是否也存在这个问题,如果存在,请及时修复!
引用链接
[1]
OneBlog: https://gitee.com/yadong.zhang/DBlog
[2]
ShiroConfig.java: https://gitee.com/yadong.zhang/DBlog/blob/master/blog-admin/src/main/java/com/zyd/blog/core/config/ShiroConfig.java

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Agileutil v0.0.14 发布,超简单、易用的轻量级 Python3 RPC 框架
本次更新的版本是v0.0.14, 支持通过@rpc装饰器修饰一个类。 下面是一个TCP协议的服务端例子。 创建一个TcpRpcServer对象, 指定服务端监听地址和端口 通过@rpc装饰器注册需要被客户端请求的方法 调用serve()方法,开始处理客户端请求 from agileutil.rpc.server import TcpRpcServer, rpc @rpc class TestService: def hello(self, name): return "Hello, {}!".format(name) def add(self, a, b, c): return a + b + c @rpc def hello(name): return "Hello, {}!".format(name) server = TcpRpcServer('0.0.0.0', 9988) server.serve() TCP RPC 客户端 创建TcpRpcClient对象,指定RPC服务端地址 通过call()方法,指定服务端方法名称和参数(注...
- 下一篇
鸿蒙内核源码分析(特殊进程篇) | 龙生龙,凤生凤,老鼠生儿会打洞 | 百篇博客分析HarmonyOS源码 | v46.01
百万汉字注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新< gitee | github | csdn | coding > 百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,主流站点定期更新中< oschina | csdn | harmony > 三个进程 鸿蒙有三个特殊的进程,创建顺序如下: 2号进程,KProcess,为内核态根进程.启动过程中创建. 0号进程,KIdle为内核态第二个进程,它是通过KProcess fork 而来的.这有点难理解. 1号进程,init,为用户态根进程.由任务SystemInit创建. 发现没有在图中看不到0号进程,在看完本篇之后请想想为什么? 家族式管理 进程(process)是家族式管理,总体分为两大家族,用户态家族和内核态家族. 用户态的进程是平民阶层,干着各行各业的活,权利有限,人数众多,活动范围有限.中南海肯定不能随便进出.这个阶层有个共同的老祖宗g_userInitProcess (1号进程). g_userInit...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS关闭SELinux安全模块
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker安装Oracle12C,快速搭建Oracle学习环境