Springboot配置文件中的明文密码漏洞

news2024/12/25 12:42:50

目录

一、背景        

二、本地修复测试

1、maven中引入jasypt 

2、编写加密解密工具类

3、修改配置文件,增加秘钥

4、秘钥放在启动项

 三、生产实现

1、升级打包代码

2、生产yml修改明文密码处

3、修改启动命令


一、背景        

        最近接收到网安的系统安全漏洞通知,其中有一个Springboot项目存在配置文件中采用明文存储密码漏洞,如下代码,会导致所有能够访问该文件的人都能访问该密码,将会降低系统安全性。即使不能阻止应用程序被那些可以访问配置文件的攻击者入侵,也可以通过加密密码提升攻击者入侵难度,故配置文件中的密码应进行加密存储。于是需要修复。建议配置文件中采用jasypt加密的密码存储密码。于是就按照建议做下修复方案。

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: oracle.jdbc.OracleDriver
    username: objBat
    password: rootUdasd_110$$
    url: jdbc:oracle:thin:@//10.10.55.1110:1521/objPro

二、本地修复测试

1、maven中引入jasypt 

pom文件中加入以下配置即可,版本根据情况而定

<!--jasypt配置加密-->
		<dependency>
			<groupId>com.github.ulisesbocchio</groupId>
			<artifactId>jasypt-spring-boot-starter</artifactId>
			<version>2.1.2</version>
		</dependency>

2、编写加密解密工具类

既然要加密解密,那至少得有个测试工具才能知道加密,解密之后密码是否产生变化, 心里才有底。

package com.project.util;

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.util.text.BasicTextEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;

/**
 * Created by HJ on 2023/5/26 
 */
public class EscUtil {
    @Autowired
    private StringEncryptor stringEncryptor;

     public String encry(String str){
        String encData = stringEncryptor.encrypt(str);
        String decData = stringEncryptor.decrypt(encData);
        System.out.println("加密数据:"+encData);
        System.out.println("解密数据: " +decData);
        return encData;
    }

    public static void main(String[] args) {
        //创建加密对象,默认PBEWhisMD5AndDES
        BasicTextEncryptor encryptor = new BasicTextEncryptor();
        //加密秘钥
        encryptor.setPassword("BD9FA15C-7976-47DA-B8D5-E2438115F937");
        //将明文进行加密
        String encData = encryptor.encrypt("rootUdasd_110$$");
        //密文解密
        String decData = encryptor.decrypt(encData);
        System.out.println("数据加密后:"+encData);
        System.out.println("数据解密后: "+decData);
        String encDatar = encryptor.encrypt("redisUhsgf_52#");
        //密文解密
        String decDatar = encryptor.decrypt(encDatar);
        System.out.println("r加密后:"+encDatar);
        System.out.println("r解密后: "+decDatar);
    }

}

其中 encryptor.setPassword后边接的是秘钥,这就使用UUID作为秘钥加密,也就是下文的BD9FA15C-7976-47DA-B8D5-E2438115F937 然后将明文密码放进去进行加密,再输出解密后的密码,看是否一致,那如下结果,看起来是一致的

这个时候我们再运行一次,发现加密后的代码跟之前的不一样了,那有人可能担心了,那密码到底是按照哪个呢?答案就是,jasypt加密每次加密产生的密文都不一样,然后不一样的密文解密产生的结果是一样的,也就是说,随便写一个生成的密文都可以。

 

3、修改配置文件,增加秘钥

在配置文件中增加秘钥配置 ,项目中使用的yml配置,那就这样加了,如果是properties配置,对应转化下就行

#jasypt加密秘钥
jasypt:
  encryptor:
    password: abcdef

修改明文密码的地方,将加密后的密文使用ENC加括号括起来即可

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: oracle.jdbc.OracleDriver
    username: objBat
    password: ENC(2C4G7sdQSEwHUEnZMxQOVNHkZxTQ4DoT)
    url: jdbc:oracle:thin:@//10.10.55.1110:1521/objPro

启动项目,可以正常连接,表示没问题

4、秘钥放在启动项

由于秘钥是放在yml配置文件中,其实就相当于告诉你,我加密了,加密的秘钥也在这里,颇有点掩耳盗铃的风范,于是为了安全起见,最好把秘钥放在启动项或者配置项里。启动项VM加上以下配置,

-Djasypt.encryptor.password=BD9FA15C-7976-47DA-B8D5-E2438115F937

 然后yml中删除jasypt加密秘钥,也就是这些

 三、生产实现

1、升级打包代码

2、生产yml修改明文密码处

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: oracle.jdbc.OracleDriver
    username: objBat
    password: ENC(2C4G7sdQSEwHUEnZMxQOVNHkZxTQ4DoT)
    url: jdbc:oracle:thin:@//10.10.55.1110:1521/objPro

3、修改启动命令

在启动命令之后增加秘钥配置

--jasypt.encryptor.password=BD9FA15C-7976-47DA-B8D5-E2438115F937


java -jar  SpringbootPro.jar --jasypt.encryptor.password=BD9FA15C-7976-47DA-B8D5-E2438115F937

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++类和对象【3】(static成员,友元内部类,匿名对象等)

文章目录 1.友元函数1.1友元函数1.2友元类 2内部类3.匿名对象4.拷贝对象的一些编译器优化5.static成员 1.友元函数 我们在类外面去访问类里的私有成员&#xff0c;就要突破类的访问限定因此就有了友元&#xff0c;它提供了一种突破封装的方式&#xff0c;但是友元会增加耦合度…

GPT时代,一定要收藏的结构化提问技巧

有一种被称为“SMART”的结构化提问方法&#xff0c;可以帮助你更好的组织和明确提出的问题。“SMART”是一个缩写&#xff0c;它代表了以下几个关键元素&#xff1a; S&#xff1a;Specific&#xff08;具体&#xff09; 确保问题具体明确&#xff0c;避免模糊或含糊不清的表…

基于SVPWM调制的三相整流器_Simulink仿真模型

文章目录 模型总览特性功能实现输入三相交流电压220Vac 经过三相整流器进行功率变换&#xff0c;输出电压750V&#xff0c;输出功率10kW&#xff0c;同时实现功率因数校正/PFC功能&#xff08;控制输入电流与输入电压同相且为正弦电流&#xff09;&#xff0c;输入电流THD为1.3…

spring cloud搭建(zuul)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

路径规划算法:基于黏菌优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于黏菌优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于黏菌优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法黏菌…

一百二十二、Git——Git上传代码(完善中)

方式一、用IDEA 第一步&#xff0c;IEDA拉项目 File——New——Project from Version Control——Git 输入URL&#xff0c;选择Directory&#xff0c;点击clone 第二步&#xff0c;把上传文件拉到IDEA项目&#xff0c;然后选中文件&#xff0c;右击Git,选择Reposity,如果上传…

中国人口增长预测

目录 问题分析 模型建立 Logistic模型 Leslie模型 模型求解 问题一 问题二 问题三 问题分析 问题 基本假设 &#xff08;1&#xff09;不考虑移民对人口总数的影响 &#xff08;2&#xff09;超过90岁按照90岁计算 &#xff08;3&#xff09;在较短时间内&#xff0c;平均…

深度学习预预训练与MMPretrain

MMPretrain算法库 优势&#xff1a; 含有各种主干网络模型自监督学习功能多模态学习功能丰富的数据集含有训练技巧和策略易用&#xff0c;例如可解释性分析、推理api 包含多种丰富任务的开箱即用推理api 图像分类图像语义描述视觉问答视觉定位检索 安装步骤 配置文件中含有…

python 社区发现算法

转载&#xff1a;这个Python库超级棒啊&#xff0c;包含Louvain 算法、Girvan-Newman 算法等多种社区发现算法&#xff0c;还具有可视化功能_11205354的技术博客_51CTO博客 熟知社区发现算法&#xff0c;你不能错过这个 Python 库。它涵盖 Louvain 算法、Girvan-Newman 算法等…

Java基础(项目2)——项目案例:控制台的一个云就业平台项目【应聘+招聘】

目录 引出项目的分层固定的流程反思1.entity --- 实体类2.dao ---数据库的CRUD【进化到Spring的JdbcTemplate】以职位投递的dao为例---进化到Spring的JdbcTemplate&#xff1a; 3.service --- 组织代码的业务【进化到servlet调用service】4.util ---需要用到的工具【进化到duri…

leetcode450. 删除二叉搜索树中的节点(java)

删除二叉搜索树中的节点 leetcode450. 删除二叉搜索树中的节点题目描述 解题思路代码演示二叉树专题 leetcode450. 删除二叉搜索树中的节点 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/delete-node-in-a-bst 题目描述…

【SpringCloud——Elasticsearch(下)】

一、数据聚合 聚合&#xff0c;可以实现对文档数据的统计、分析、运算。常见的聚合有三类&#xff1a; ①、桶聚合&#xff1a;用来对文档做分组 TermAggregation&#xff1a;按照文档字段值分组。Date Histogram&#xff1a;按照日期解题分组&#xff0c;例如一周为一组&am…

10 - Linux进程层次分析

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;Linux系统编程训练营 - 目录 文章目录 1. 详解Linux进程组1.1 Linux进程组1.2 进程组示例程序1.3 编程实验&#xff1a;Linux进程组1.4 深入理解进程组1.4.1 进程组标识设置技巧…

Java实习生面试实录

你平时是怎么使用多线程的 我认为多线程使用我们可以就是你手动的&#xff0c;最初始学多线程就是可以去new Thread&#xff0c;然后去创建别的线程去异步执行一些任务&#xff0c;但是多线程的话最多使用可能在线程池这块会用到吧多线程技术就是创建线程池&#xff0c;然后由…

马尔可夫链蒙特卡罗算法(MCMC方法)

MCMC方法是什么 具体而言&#xff0c;假设我们要计算积分 μ ∫ S h ( θ ) π ( θ ∣ x ) d θ \mu\int_Sh(\theta)\pi(\theta|x)d\theta μ∫S​h(θ)π(θ∣x)dθ如果后验分布 π ( θ ∣ x ) \pi(\theta|x) π(θ∣x)难以直接抽样&#xff0c;那么我们就可以构造一条马氏…

Unity | HDRP高清渲染管线学习笔记:Volume

目录 一、Volume框架 二、Volume Profile 三、Volume重载 1.Visual Environment&#xff08;环境设置&#xff09; 1.1 Sky type 1.2 Ambient Mode 2.Sky 2.1 HDRI Sky&#xff08;HDRI天空&#xff09; 2.2 Gradient Sky&#xff08;渐变天空&#xff09; 2.3 Physi…

JAVA日志框架

JAVA日志框架 常见日志框架日志级别阿里日志规约什么时候打印日志配置文件log4j.propertieslogback-spring.xmllogback的默认配置 导入依赖日志使用方式&#xff0c;引入slf4j的API输出用户日志 常见日志框架 日志框架&#xff1a;Log4j 、Logback 。 日志门面&#xff1a;Slf…

第2章:SpringMVC的@RequestMapping注解

一、SpringMVC搭建框架 1.创建一个Maven程序的步骤 ①在pom.xml导入maven依赖 <!--打包方式是war--> <!--war 包通常用于网站&#xff0c;它是一个可以直接运行的 web 模块--> <packaging>war</packaging> <dependencies><!-- SpringMVC --…

二战阿里巴巴成功上岸,准备了小半年,拿23k也不算很高吧~

先说下我基本情况&#xff0c;本科不是计算机专业&#xff0c;现在是学通信&#xff0c;然后做图像处理&#xff0c;可能面试官看我不是科班出身没有问太多计算机相关的问题&#xff0c;因为第一次找工作&#xff0c;阿里的游戏专场又是最早开始的&#xff0c;就投递了&#xf…

如何获取 C#程序 内核态线程栈

一&#xff1a;背景 1. 讲故事 在这么多的案例分析中&#xff0c;往往会发现一些案例是卡死在线程的内核态栈上&#xff0c;但拿过来的dump都是用户态模式下&#xff0c;所以无法看到内核态栈&#xff0c;这就比较麻烦&#xff0c;需要让朋友通过其他方式生成一个蓝屏的dump&…