其他
如何保护你的 SpringBoot 项目:防止源代码泄露,确保更安全的部署
耗时8个月联合打造 《 2023年Java高薪课程 》,已更新了 102G 视频,累计更新时长 500+ 个小时,需要的小伙伴可以了解下,一次购买,持续更新,无需2次付费。
在当今的互联网时代,软件开发和部署已经成为了现代企业不可或缺的一部分。但是随之而来的安全风险也越来越高,其中最主要的问题之一就是源代码泄露。
1
源代码泄露的危害2
如何保护SpringBoot项目<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>6.2.0</version>
</dependency>
<dependency>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<proguardVersion>6.2.0</proguardVersion>
<injar>${project.build.finalName}.jar</injar>
<outjar>${project.build.finalName}-proguarded.jar</outjar>
<obfuscate>true</obfuscate>
<options>
<option>-keep public class com.example.** { *; }</option>
<option>-dontobfuscate</option>
</options>
</configuration>
</plugin>
</plugins>
</build>
需要注意的是,使用 ProGuard 进行混淆和优化操作可能会影响应用程序的性能和稳定性,因此需要在测试和部署前进行充分的测试和验证。此外,如果应用程序依赖于第三方库或框架,需要确保这些库和框架的使用方式不会受到混淆和优化的影响。
<build>
<plugins>
<plugin>
<groupId>com.github.revelc</groupId>
<artifactId>yguard-maven-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>yguard</goal>
</goals>
</execution>
</executions>
<configuration>
<injar>${project.build.finalName}.jar</injar>
<outjar>${project.build.finalName}-yguarded.jar</outjar>
<renamePropertiesFile>rename.properties</renamePropertiesFile>
<rulesFiles>
<rulesFile>config/yguard.xml</rulesFile>
</rulesFiles>
</configuration>
</plugin>
</plugins>
</build>
<yguard xmlns="http://www.yworks.com/xml/yguard/1.5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.yworks.com/xml/yguard/1.5 http://www.yworks.com/xml/yguard/1.5/yguard.xsd">
<externalclasses>
<class name="org.springframework.**"/>
<class name="com.example.**"/>
</externalclasses>
<rename mainclass="com.example.Application">
<property name="file" value="rename.properties"/>
</rename>
<shrink logfile="yguard-shrink.log">
<property name="verbose" value="true"/>
<property name="preserveAll" value="true"/>
<keep>
<class name="com.example.Application"/>
</keep>
</shrink>
<obfuscate logfile="yguard-obfuscate.log">
<property name="verbose" value="true"/>
<classmap>
<class name="com.example.Application" map="a"/>
</classmap>
<keep>
<class name="com.example.Application"/>
</keep>
</obfuscate>
</yguard>
a=com.example.Application
mvn clean package
<build>
<plugins>
<plugin>
<groupId>io.xjar</groupId>
<artifactId>xjar-maven-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>package</id>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 设置JAR包加密密钥 -->
<key>your secret key</key>
<!-- 设置JAR包的输出目录 -->
<outputDirectory>${project.build.directory}</outputDirectory>
<!-- 设置生成的可执行JAR文件名 -->
<outputName>${project.artifactId}-${project.version}-xjar.jar</outputName>
<!-- 设置需要排除的类或资源文件 -->
<exclude>
<file>config/*.properties</file>
<file>logback*.xml</file>
</exclude>
</configuration>
</plugin>
</plugins>
</build>
key: 设置JAR包加密密钥,必填项。 outputDirectory: 设置生成的可执行JAR文件的输出目录,默认为${project.build.directory}。 outputName: 设置生成的可执行JAR文件名,默认为project.artifactId − {project.artifactId}-project.artifactId−{project.version}-xjar.jar。 exclude: 设置需要排除的类或资源文件,以防止它们被加密或打包到JAR文件中。
mvn clean package
java -jar ${project.artifactId}-${project.version}-xjar.jar
-Dcom.sun.management.jmxremote=false
提高应用程序的可管理性: 使用JMX可以监控应用程序的性能、状态和运行状况等信息,有助于及时发现问题和进行故障排除。 提高应用程序的可监控性: 通过JMX可以监控应用程序的资源使用情况,如CPU、内存、磁盘等,有助于实现资源优化和容量规划等。 改善应用程序的安全性: 通过JMX可以限制对应用程序的访问权限,实现安全管理。 有助于性能调优: 使用JMX可以对应用程序进行性能分析和调优,有助于提高应用程序的性能和稳定性。
server:
port: 8080
servlet:
session:
cookie:
http-only: true
tomcat:
method-allow-factory: org.apache.catalina.util.HttpMethodsBase$SecureMethodAllow
历史和演变: SSL是第一个广泛使用的安全协议,但其安全性受到了一些攻击和漏洞的影响。因此,TLS被设计为SSL的升级版本,具有更好的安全性和加密功能。 协议握手: TLS的握手过程包括更多的阶段,比SSL更安全,例如:TLS握手中包含了完整性保护,防止欺骗、重放攻击等。 加密标准: SSL使用RC4加密算法和MD5散列函数,而TLS使用更强大的加密算法和更安全的哈希函数,例如:AES、SHA、ECC等。 支持的版本: SSL有三个版本:SSLv1、SSLv2和SSLv3。目前SSLv2和SSLv3已被废弃。TLS有四个版本:TLSv1.0、TLSv1.1、TLSv1.2和TLSv1.3,其中TLSv1.3是最新和最安全的版本。
server:
port: 8443
ssl:
key-store: classpath:keystore.jks
key-store-password: password
key-alias: tomcat
enabled: true
3
总结
【福利】2023 高薪课程,全面来袭(视频+笔记+源码)
【福利】2023 高薪课程,全面来袭(视频+笔记+源码)
往期推荐