format javadoc
seckit提供多种安全防护功能,帮助开发者防范常见的安全漏洞。该SDK通过SecurityUtil类提供统一的入口,支持JDBC连接串过滤、SSRF攻击防护、XXE攻击防护等核心安全功能。
seckit
SecurityUtil
allowLocalInfile
autoDeserialize
<dependency> <groupId>com.alibaba</groupId> <artifactId>seckit</artifactId> <version>0.0.1</version> </dependency>
implementation 'com.alibaba:seckit:0.0.1'
注意: 本工具需要 JDK 8 以上版本
注意:
jdbc:mysql:
jdbc:mariadb:
jdbc:gbase:
jdbc:oceanbase:
jdbc:mysql2:
jdbc:mysql+srv:
mysqlx:
mysqlx+srv:
jdbc:postgresql:
jdbc:kingbase8:
jdbc:polardb:
jdbc:opengauss:
jdbc:oracle:thin:
jdbc:oracle:oci:
jdbc:oracle:kprb:
jdbc:sqlserver:
jdbc:clickhouse:
jdbc:ch:
jdbc:mongodb:
jdbc:mongodb+srv:
mongodb:
mongodb+srv:
jdbc:redis:
jdbc:hive:
jdbc:hive2:
jdbc:bigquery:
jdbc
jdbc:elasticsearch:
jdbc:opensearch:
jdbc:db2:
jdbc:teradata:
jdbc:as400:
jdbc:arrow-flight-sql:
jdbc:arrow-flight:
jdbc:taos:
jdbc:TAOS:
jdbc:taos-rs:
jdbc:lindorm:table:
jdbc:lindorm:tsdb:
jdbc:redshift:
jdbc:redshift:iam:
jdbc:presto:
jdbc:trino:
jdbc:pivotal:greenplum:
jdbc:sybase:Tds:
jdbc:informix-sqli:
jdbc:ns:
jdbc:ots:http:
jdbc:ots:https:
jdbc:odps:http:
jdbc:odps:https:
jdbc:phoenix:thin:
jdbc:impala:
jdbc:kylin:
jdbc:vertica:
jdbc:sap:
jdbc:dm:
使用SecurityUtil.filterJdbcConnectionSource()方法过滤JDBC连接串中的危险参数:
SecurityUtil.filterJdbcConnectionSource()
import com.alibaba.seckit.SecurityUtil; import com.alibaba.seckit.JdbcURLException; public class JdbcExample { public void filterJdbcUrl() { try { // 原始连接串包含危险参数 String originalUrl = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowLocalInfile=true&autoDeserialize=true&sessionVariables=abc&foo=bar"; // 过滤后的安全连接串 String safeUrl = SecurityUtil.filterJdbcConnectionSource(originalUrl); System.out.println("安全连接串: " + safeUrl); // 输出: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowLocalInfile=false&allowLoadLocalInfile=false&sessionVariables=abc } catch (JdbcURLException e) { System.err.println("JDBC URL解析失败: " + e.getMessage()); } } }
⚠️ 对于 JDK 16 及以上版本,由于JDK默认禁止了外部包通过反射访问 jdk 内部的 protected/private 成员,而安全工具的防护能力需要访问到这些成员,因此需要在虚拟机参数中添加--add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/sun.net=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/sun.net=ALL-UNNAMED
org.apache.http.impl.client.HttpClientBuilder
org.apache.hc.client5.http.impl.classic.HttpClientBuilder
org.apache.http.impl.nio.client.HttpAsyncClientBuilder
org.apache.hc.client5.http.impl.async.HttpAsyncClientBuilder
com.squareup.okhttp.OkHttpClient
okhttp3.OkHttpClient$Builder
为HTTP客户端添加SSRF检查功能:
import com.alibaba.seckit.SecurityUtil; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.client.methods.HttpGet; import org.apache.http.HttpResponse; public class SSRFExample { public void httpClientWithSSRF() throws Exception { // 为HttpClient添加SSRF检查 HttpClient client = SecurityUtil.withSSRFChecking(HttpClients.custom()).build(); // 安全的外部请求 HttpResponse response = client.execute(new HttpGet("https://www.example.com")); System.out.println("状态码: " + response.getStatusLine().getStatusCode()); // 危险的内网请求会被阻止 try { client.execute(new HttpGet("http://127.0.0.1:8080")); } catch (SecurityException e) { System.out.println("SSRF攻击被阻止: " + e.getMessage()); } } }
import com.alibaba.seckit.SecurityUtil; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class OkHttpSSRFExample { public void okHttpWithSSRF() throws Exception { // 为OkHttp客户端添加SSRF检查 OkHttpClient client = SecurityUtil.withSSRFChecking(new OkHttpClient.Builder()).build(); // 安全请求 Request request = new Request.Builder() .url("https://www.example.com") .build(); try (Response response = client.newCall(request).execute()) { System.out.println("响应码: " + response.code()); } } }
org.dom4j.io.SAXReader
javax.xml.parsers.DocumentBuilderFactory
javax.xml.parsers.SAXParserFactory
javax.xml.stream.XMLInputFactory
org.jdom2.input.SAXBuilder
javax.xml.validation.Validator
org.xml.sax.XMLReader
jdk.internal.org.xml.sax.XMLReader"
javax.xml.transform.TransformerFactory
javax.xml.validation.SchemaFactory
为XML解析器添加XXE防护:
import com.alibaba.seckit.SecurityUtil; import org.dom4j.io.SAXReader; import org.dom4j.Document; import java.io.InputStream; public class XXEExample { public void parseXmlSafely() throws Exception { // 为SAXReader添加XXE防护 SAXReader reader = SecurityUtil.withXxeProtection(new SAXReader()); // 安全解析XML InputStream xmlStream = getClass().getResourceAsStream("/safe.xml"); Document document = reader.read(xmlStream); System.out.println("XML解析成功: " + document.getRootElement().getName()); } }
使用NetHook方式对所有TCP连接进行SSRF检查:
import com.alibaba.seckit.SecurityUtil; import exception.ssrf.com.alibaba.seckit.SSRFUnsafeConnectionException; import java.net.URL; public class NetHookSSRFExample { public void netHookSSRF() { try { // 启动SSRF检查 SecurityUtil.startSSRFNetHookChecking(); // 执行网络请求 URL url = new URL("https://www.example.com"); url.openConnection().getInputStream(); } catch (SSRFUnsafeConnectionException e) { System.err.println("检测到SSRF攻击: " + e.getMessage()); } catch (Exception e) { System.err.println("请求失败: " + e.getMessage()); } finally { // 停止SSRF检查 SecurityUtil.stopSSRFNetHookChecking(); } } }
本项目采用 Apache License 2.0 许可证。
欢迎提交Issue和Pull Request来改进这个项目。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
阿里巴巴安全SDK
seckit提供多种安全防护功能,帮助开发者防范常见的安全漏洞。该SDK通过SecurityUtil类提供统一的入口,支持JDBC连接串过滤、SSRF攻击防护、XXE攻击防护等核心安全功能。功能特性
🔒 JDBC连接串安全过滤
allowLocalInfile、autoDeserialize等🛡️ SSRF攻击防护
🚫 XXE攻击防护
快速开始
Maven依赖
Gradle依赖
使用指南
1. JDBC连接串过滤
支持的数据库类型
jdbc:mysql:,jdbc:mariadb:,jdbc:gbase:,jdbc:oceanbase:,jdbc:mysql2:,jdbc:mysql+srv:,mysqlx:,mysqlx+srv:jdbc:postgresql:,jdbc:kingbase8:,jdbc:polardb:,jdbc:opengauss:jdbc:oracle:thin:,jdbc:oracle:oci:,jdbc:oracle:kprb:jdbc:sqlserver:jdbc:clickhouse:,jdbc:ch:jdbc:mongodb:,jdbc:mongodb+srv:,mongodb:,mongodb+srv:jdbc:redis:jdbc:hive:jdbc:hive2:jdbc:bigquery:jdbc
,jdbc:elasticsearch:jdbc:opensearch:jdbc:db2:jdbc:teradata:jdbc:as400:jdbc:arrow-flight-sql:,jdbc:arrow-flight:jdbc:taos:,jdbc:TAOS:,jdbc:taos-rs:jdbc:lindorm:table:,jdbc:lindorm:tsdb:jdbc:redshift:,jdbc:redshift:iam:jdbc:presto:jdbc:trino:jdbc:pivotal:greenplum:jdbc:sybase:Tds:jdbc:informix-sqli:jdbc:ns:jdbc:ots:http:,jdbc:ots:https:jdbc:odps:http:,jdbc:odps:https:jdbc:phoenix:thin:jdbc:impala:jdbc:kylin:jdbc
jdbc:vertica:jdbc:sap:jdbc:dm:使用
SecurityUtil.filterJdbcConnectionSource()方法过滤JDBC连接串中的危险参数:2. SSRF攻击防护
支持的HTTP客户端
org.apache.http.impl.client.HttpClientBuilderorg.apache.hc.client5.http.impl.classic.HttpClientBuilderorg.apache.http.impl.nio.client.HttpAsyncClientBuilderorg.apache.hc.client5.http.impl.async.HttpAsyncClientBuildercom.squareup.okhttp.OkHttpClientokhttp3.OkHttpClient$Builder2.1 Apache HTTP客户端SSRF检查
为HTTP客户端添加SSRF检查功能:
2.2 OkHttp客户端SSRF检查
3. XXE攻击防护
支持的XML解析器
org.dom4j.io.SAXReaderjavax.xml.parsers.DocumentBuilderFactoryjavax.xml.parsers.SAXParserFactoryjavax.xml.stream.XMLInputFactoryorg.jdom2.input.SAXBuilderjavax.xml.validation.Validatororg.xml.sax.XMLReaderjdk.internal.org.xml.sax.XMLReader"javax.xml.transform.TransformerFactoryjavax.xml.validation.SchemaFactory为XML解析器添加XXE防护:
高级用法
NetHook方式SSRF检查
使用NetHook方式对所有TCP连接进行SSRF检查:
许可证
本项目采用 Apache License 2.0 许可证。
贡献指南
欢迎提交Issue和Pull Request来改进这个项目。
联系方式