【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+用户加盐

news/2024/12/3 7:50:54/文章来源:https://www.cnblogs.com/o-O-oO/p/18583218

此功能模块我们最好还是配合上用户注册功能进行测试, 定义如下UserController:

@PostMapping("/register")
public String register(String username, String password){try {userService.insertUser(username, password);return "login";} catch (Exception e) {throw new RuntimeException(e);}
}

定义UserServiceImpl::insertUser方法:

@Service
public class UserServiceImpl {@Resourceprivate UserMapper userMapper;// ...public void insertUser(String username, String password) throws Exception {// Md5Hash md5Hash = new Md5Hash(password); // 进行 MD5 加密String salt = "mysalt"; // 实战中盐可以随机password = new Md5Hash(password, salt).toHex(); // md5(盐 + 密码)User user = new User();user.setUsername(username);user.setPassword(password);user.setPasswordSalt(salt); // 设置盐userMapper.insertUser(user); // 最终将盐也添加进去.}
}

而UserMapper接口定义如下:


public void insertUser(User user);
/* 实现:<insert id="insertUser" parameterType="User">INSERT INTO `tb_users` VALUES(NULL, #{username}, #{password}, #{passwordSalt});</insert>
*/

随后我们在MyRealm::doGetAuthenticationInfo方法中将盐返回给SecurityManager:

@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {// subject.login(token) 会调用到这里UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token; // 认证时, 强制转换String username = usernamePasswordToken.getUsername(); // 得到用户名User user = userMapper.queryUserByUserName(username); // 从数据库中查询该用户名, 得到该用户信息if (user != null) {// 成功从数据库中查询到用户, 我们就将用户的信息封装到 AuthenticationInfo 中, SimpleAuthenticationInfo 是 AuthenticationInfo 的子类return new SimpleAuthenticationInfo(username, user.getPassword(), ByteSource.Util.bytes(user.getPasswordSalt()), this.getName()); // 注意这里的 ByteSource.Util.bytes(user.getPasswordSalt()) 用于返回盐// new SimpleAuthenticationInfo(用户名, 用户密码, 当前盐, 当前Realm名称)}return null;
}

测试完毕后, 我们需要将数据库其他用户账号密码统一改为加盐模式, 否则其他用户无法登录:

mysql> update tb_Users set password_salt = '7788', password = MD5(CONCAT(password_salt, '123456')) WHERE user_id < 6; -- 其他用户密码统一设置为123456
Query OK, 5 rows affected (0.11 sec)
Rows matched: 5  Changed: 5  Warnings: 0mysql> SELECT * FROM tb_Users;
+---------+----------+----------------------------------+---------------+
| user_id | username | password                         | password_salt |
+---------+----------+----------------------------------+---------------+
|       1 | zhangsan | e97e4623f9bb7f1280233bfbe2793e70 | 7788          |
|       2 | lisi     | e97e4623f9bb7f1280233bfbe2793e70 | 7788          |
|       3 | wangwu   | e97e4623f9bb7f1280233bfbe2793e70 | 7788          |
|       4 | zhaoliu  | e97e4623f9bb7f1280233bfbe2793e70 | 7788          |
|       5 | chenqi   | e97e4623f9bb7f1280233bfbe2793e70 | 7788          |
|       6 | heihu577 | d23170a6c09cb22ef2b690406d86cd64 | mysalt        |
+---------+----------+----------------------------------+---------------+
6 rows in set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/845904.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+退出登录

在我们的ShiroAutoConfiguration::ShiroFilterFactoryBean中, 我们增加如下代码: @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();shiroFilte…

【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+自定义 Realm

在真正的项目中, 我们不会使用Shiro提供的JdbcRealm, 而是使用自定义Realm, 配合我们的MyBatis, 以及自定义表结构进行联合使用.表结构定义 那么下面我们来定义这些表:-- 用户信息表 CREATE TABLE `tb_users`(user_id int unsigned primary key auto_increment,username varcha…

【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+IniRealm

IniRealm 如果我们想在SpringBoot中进行使用Shiro, 那么我们肯定是需要围绕如下环节进行研究. 创建 pom.xml: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.3&l…

【Java漏洞】Shiro 漏洞:SpringBoot 整合 Shiro+JdbcRealm

JdbcRealm 其中JdbcRealm需要创建如下表结构: CREATE TABLE `users`(id int primary key auto_increment,username varchar(60) not null unique,password varchar(60) not null,password_salt varchar(20) ); -- 创建五个用户如下 INSERT INTO `users`(username, password) VA…

【Java漏洞】Shiro 漏洞:基于 Java SE 基本使用

在pom.xml文件中进行引入依赖: <dependencies><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.4.1</version></dependency> </dependencies>因为本次的Realm从文…

【Java漏洞】Shiro 漏洞:Shiro 核心组件

Shiro 的运行流程为如下:这里 Subject 的创建是由 SecurityUtils 进行创建的, 后面我们代码会给出案例, 官方给出的图如下:

【Java漏洞】Shiro 漏洞:权限管理

Shiro 的漏洞已爆出很多年, 我们只关心到了它如何触发, 有时并没有想过这个框架是干嘛的, 甚至没有分析过该框架的底层运行逻辑, 那么本篇文章, 让大家从开发者的角度, 来观察。 概念为了实现不同身份登录系统, 出现的功能模块不一样。这个需求叫做权限管理。 学生登录后, 出现…

读数据保护:工作负载的可恢复性02收集需求

收集需求1. 要点 1.1. 数据保护并不是IT里面最出彩的部分1.1.1. 让这个组织知道自己可能遭受哪些风险1.1.2. 与该组织内具有核心竞争力的IT产品通常没有什么联系1.2. 做数据保护所需的资源通常很昂贵,而且这些资源并不会体现在该组织卖给客户的最终产品里1.2.1. 没人会情愿为这…

怎么去除img之间存在的间隔缝隙?

在前端开发中,img 元素之间出现间隔缝隙通常是由几个原因造成的,以下列出常见原因及解决方法: 1. 默认的 inline-block 行为:原因: img 元素默认是 inline-block 元素。inline-block 元素会受到空格和换行符的影响,这些空格和换行符会被渲染成一个空格,从而导致元素之间出…

window10安装子系统wsl2

启用linux子系统 打开控制面板 点击程序点击 启用或关闭 Windows 功能勾选 适用于 Linux 的 Windows 子系统 然后点击确定[Haima的博客] http://www.cnblogs.com/haima/

免费实时翻译软件-MTtranslator

MTtranslator 基于win11的实时字幕(Live Captions),利用本地大模型(Helsinki-NLP/opus-mt-en-zh)实现实时翻译功能。功能特点仅支持英文到简体中文翻译该应用专为实时字幕翻译设计,支持从英文到简体中文的转换。离线操作翻译完全离线进行,保证隐私安全。但翻译质量仅供参…

Educational Codeforces Round 172 (Rated for Div. 2)

A. Greedy Monocarp题目大意:给你n个箱子,每个箱子有ai枚硬币,现在有一个人会进行若干次操作:每次拿走硬币最多的箱子,直到他的硬币总和大于等于k。 你可以在一些箱子内增加一些硬币,使得这个人拿走的硬币数量最小,问你最少需要加多少枚硬币。思路: 看数据范围,ai<…