赞
踩
在部署SpringBoot项目时,如果不对其进行加密,源码就会有泄露的风险。具体来说,当攻击者获得到我们部署的jar
包之后,通过jd-gui
工具对其进行反编译即可看到源码。所以需要在打包之前对项目文件进行加密。我查到的加密工具有xjar
、Proguard
等。这篇文章以xjar
为例对SpringBoot项目进行加密打包。
maven
,用于打包SpringBoot项目jd-gui
,用于对打包文件进行反编译go
,用于对xjar打包的go文件进行编译主要添加两个东西:
<!-- 设置 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>
打包的时候会遇到下载的问题。
有的博客会把xjar打包所用的密码直接写到configuration配置节中,比如:
<!-- xjar -->
<configuration>
<targetJar>${project.artifactId}-xjar.jar</targetJar>
<password>your_password</password> // 直接把密码写在这里
</configuration>
这样仍然会有问题。xjar是不会加密pom.xml文件的。当打包完成之后,攻击者对jar包进行反编译,还是可以看到打包所使用的密码,从而造成泄露。在第3步中会讲解密码应该写在哪里。
首先描述一下完整的问题:
我用SpringBoot和Thymeleaf写了一个项目,在Thymeleaf中,每个html引入了外部js文件和css文件,这些文件在resources文件夹中。在项目打包时,我通过xjar对其进行了加密。我发现加密之后,接口无法引入外部的js文件和css文件了,导致访问接口时页面显示空白;但是如果不用xjar加密,则接口访问正常。
最后根据chatgpt的回答解决了。主要问题就是xjar
在加密打包时,会修改资源文件的路径,而js
、css
文件都是资源文件,所以无法正确加载文件。那解决方案也很容易,通过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>
打开终端,执行如下命令:
mvn clean package -Dxjar.password=<your_password> # 密码应该写在这里
产生的目录结构为:
其中,xxx-xjar.jar
是加密打包后的文件(文件名和在pom.xml中配置的相同)。之后我们部署主要用到两个文件:xxx-xjar.jar
和xjar.go
。
这里准备两版打包文件:没有使用xjar打包的未加密jar包(假设名字为xxx.jar
)、使用了xjar打包的加密jar包(xxx-xjar.jar
)。然后用jd-gui
分别打开xxx.jar
和xxx-xjar.jar
,观察文件结果。
这里就不放截图了,文字说明一下加密后的文件:文件大部分都为空,或者是乱码。
首先把xxx-xjar.jar
和xjar.go
上传到服务器上,然后对xjar.go
文件进行编译:
go build xjar.go
这一步会生成一个可执行文件xjar
。然后执行命令:
xjar java -jar xxx-xjar.jar
项目启动成功,说明部署完成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。