基于 Java 的 Halo 网站安全测试代码
以下是基于 Java 编写的 Halo 网站安全测试代码,涵盖 漏洞扫描、HTTP 头检测、SQL 注入 /XSS 防护、证书检查 等核心安全测试功能,结合 Spring Boot 和 OWASP 工具链 实现模块化测试。
一、基础安全测试模块
1. HTTP 头信息泄露检测
检查响应头是否暴露敏感信息(如 Server、X-Powered-By):
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;
public class HeaderLeakScanner {
public static void scan(String url) throws IOException {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("GET");
connection.connect();
Map<String, List<String>> headers = connection.getHeaderFields();
boolean isLeaked = headers.entrySet().stream()
.anyMatch(entry -> entry.getKey() != null &&
(entry.getKey().equalsIgnoreCase("Server") ||
entry.getKey().equalsIgnoreCase("X-Powered-By")));
if (isLeaked) {
System.out.println("⚠ 发现HTTP头信息泄露: " + headers);
} else {
System.out.println("✅ 未检测到HTTP头信息泄露");
}
connection.disconnect();
}
}功能:检测服务器版本泄露风险。
2. SQL 注入/XSS 攻击模拟
使用正则表达式检测输入中的攻击特征:
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SecurityFilter implements Filter {
private static final String[] EVIL_PATTERNS = {
"<script>", "SELECT * FROM", "DROP TABLE", "eval\\(.*\\)"
};
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String query = req.getQueryString();
for (String pattern : EVIL_PATTERNS) {
if (query != null && query.contains(pattern)) {
((HttpServletResponse) response).sendError(403, "WAF拦截:攻击特征 '" + pattern + "'");
return;
}
}
chain.doFilter(request, response);
}
}功能:轻量级 WAF 拦截常见攻击。
二、高级安全测试模块
3. SSL/TLS 证书有效期检查
验证网站证书是否过期:
import javax.net.ssl.HttpsURLConnection;
import java.net.URL;
import java.security.cert.Certificate;
public class CertificateChecker {
public static void checkExpiration(String url) throws Exception {
HttpsURLConnection conn = (HttpsURLConnection) new URL(url).openConnection();
conn.connect();
Certificate[] certs = conn.getServerCertificates();
for (Certificate cert : certs) {
System.out.println("证书过期时间: " + cert.getExpiration());
}
conn.disconnect();
}
}功能:防止因证书过期导致的安全风险。
4. 依赖库漏洞扫描(集成 OWASP Dependency-Check)
通过 Maven 插件自动扫描第三方库漏洞:
<!-- pom.xml 配置 -->
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>9.0.9</version>
<configuration>
<autoUpdate>true</autoUpdate>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>执行命令:
mvn dependency-check:check输出:生成 dependency-check-report.html 报告,列出漏洞依赖。
三、自动化测试集成
5. Spring Security 测试用例
验证权限控制是否生效:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@SpringBootTest
@AutoConfigureMockMvc
public class SecurityTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testUnauthorizedAccess() throws Exception {
mockMvc.perform(get("/admin"))
.andExpect(status().isUnauthorized());
}
@Test
@WithMockUser(roles = "ADMIN")
public void testAuthorizedAccess() throws Exception {
mockMvc.perform(get("/admin"))
.andExpect(status().isOk());
}
}功能:测试接口权限控制。
四、综合测试脚本
6. 主程序整合所有测试
public class HaloSecurityTester {
public static void main(String[] args) {
try {
// 1. HTTP头检测
HeaderLeakScanner.scan(" https://your-halo-site.com ");
// 2. 证书检查
CertificateChecker.checkExpiration(" https://your-halo-site.com ");
// 3. 依赖漏洞扫描需单独运行Maven命令
System.out.println("依赖漏洞扫描: 执行 mvn dependency-check:check");
// 4. 模拟攻击测试(需部署Filter)
System.out.println("手动测试SQL注入/XSS防护");
} catch (Exception e) {
e.printStackTrace();
}
}
}五、部署与扩展建议
部署方式:
将
SecurityFilter注册为 Servlet Filter(在web.xml或 Spring Boot 的@Configuration中)。定期运行
dependency-check并修复高危漏洞。
扩展功能:
动态规则引擎:替换正则匹配为 AI 驱动的动态规则库(如集成机器学习模型)。
自动化 CI/CD:将安全测试加入 Jenkins/GitHub Actions 流水线。
引用来源
HTTP 头泄露检测
WAF 拦截逻辑
证书检查
OWASP 依赖扫描
Spring Security 测试
基于 Java 的 Halo 网站安全测试代码
https://uniomo.com/archives/ji-yu-java-de-halo-wang-zhan-an-quan-ce-shi-dai-ma