当前位置:   article > 正文

【项目部署】xjar加密SpringBoot项目防止源码泄露_springboot xjar

springboot xjar

0. 前言

在部署SpringBoot项目时,如果不对其进行加密,源码就会有泄露的风险。具体来说,当攻击者获得到我们部署的jar包之后,通过jd-gui工具对其进行反编译即可看到源码。所以需要在打包之前对项目文件进行加密。我查到的加密工具有xjarProguard等。这篇文章以xjar为例对SpringBoot项目进行加密打包。

1. 准备工作

  • 开发环境下(windows)下载maven,用于打包SpringBoot项目
  • 开发环境下(windows)下载jd-gui,用于对打包文件进行反编译
  • 部署环境下(Linux)下载go,用于对xjar打包的go文件进行编译

maven
jd-gui
go

2. SpringBoot添加xjar依赖

2.1 修改pom.xml文件

主要添加两个东西:

  • jitpack.io插件仓库
  • xjar插件
<!-- 设置 jitpack.io 插件仓库 -->
<pluginRepositories>
    <pluginRepository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </pluginRepository>
</pluginRepositories>

<build>
	<finalName>xxx</finalName>
    <plugins>
        <!-- xjar -->
            <plugin>
			    <groupId>com.github.core-lib</groupId>
                <artifactId>xjar-maven-plugin</artifactId>
                <version>4.0.2</version>
			    <executions>
			        <execution>
			            <id>xjar</id>
			            <phase>package</phase>
			            <goals>
			                <goal>build</goal>
			            </goals>
			        </execution>
			    </executions>
			    <configuration>
					<targetJar>${project.artifactId}-xjar.jar</targetJar> // 加密打包后的文件名
				</configuration>
			</plugin>
    </plugins>
</build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

2.2 可能遇到的bug

2.2.1 没有添加jitpack.io

打包的时候会遇到下载的问题。

2.2.2 将password写在configuration配置节中

有的博客会把xjar打包所用的密码直接写到configuration配置节中,比如:

<!-- xjar -->
<configuration>
	<targetJar>${project.artifactId}-xjar.jar</targetJar>
	<password>your_password</password>  // 直接把密码写在这里
</configuration>        
  • 1
  • 2
  • 3
  • 4
  • 5

这样仍然会有问题。xjar是不会加密pom.xml文件的。当打包完成之后,攻击者对jar包进行反编译,还是可以看到打包所使用的密码,从而造成泄露。在第3步中会讲解密码应该写在哪里。

2.2.3 部署后接口无法返回页面

首先描述一下完整的问题:

我用SpringBoot和Thymeleaf写了一个项目,在Thymeleaf中,每个html引入了外部js文件和css文件,这些文件在resources文件夹中。在项目打包时,我通过xjar对其进行了加密。我发现加密之后,接口无法引入外部的js文件和css文件了,导致访问接口时页面显示空白;但是如果不用xjar加密,则接口访问正常。

最后根据chatgpt的回答解决了。主要问题就是xjar在加密打包时,会修改资源文件的路径,而jscss文件都是资源文件,所以无法正确加载文件。那解决方案也很容易,通过excludes配置节排除对资源文件的打包就行。

具体写法:

<!-- xjar -->
<plugin>
    <groupId>com.github.core-lib</groupId>
    <artifactId>xjar-maven-plugin</artifactId>
    <version>4.0.2</version>
    <executions>
        <execution>
            <id>xjar</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
		<targetJar>${project.artifactId}-xjar.jar</targetJar>
		// excludes配置节,不对哪些文件进行加密
		<excludes>
			<exclude>
				static/**
			</exclude>
			<exclude>
				templates/**
			</exclude>
		</excludes>
	</configuration>
</plugin>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

3. 加密打包

打开终端,执行如下命令:

mvn clean package -Dxjar.password=<your_password> # 密码应该写在这里
  • 1

产生的目录结构为:
在这里插入图片描述

其中,xxx-xjar.jar是加密打包后的文件(文件名和在pom.xml中配置的相同)。之后我们部署主要用到两个文件:xxx-xjar.jarxjar.go

4. 测试加密效果

这里准备两版打包文件:没有使用xjar打包的未加密jar包(假设名字为xxx.jar)、使用了xjar打包的加密jar包(xxx-xjar.jar)。然后用jd-gui分别打开xxx.jarxxx-xjar.jar,观察文件结果。

这里就不放截图了,文字说明一下加密后的文件:文件大部分都为空,或者是乱码。

5. 项目部署

首先把xxx-xjar.jarxjar.go上传到服务器上,然后对xjar.go文件进行编译:

go build xjar.go
  • 1

这一步会生成一个可执行文件xjar。然后执行命令:

xjar java -jar xxx-xjar.jar
  • 1

项目启动成功,说明部署完成。

参考资料

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/984613
推荐阅读
相关标签
  

闽ICP备14008679号