基于 Java 的 Halo 网站安全测试代码

以下是基于 Java 编写的 Halo 网站安全测试代码,涵盖 漏洞扫描、HTTP 头检测、SQL 注入 /XSS 防护、证书检查 等核心安全测试功能,结合 Spring BootOWASP 工具链 实现模块化测试。


一、基础安全测试模块

1. HTTP 头信息泄露检测

检查响应头是否暴露敏感信息(如 ServerX-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();
        }
    }
}

五、部署与扩展建议

  1. 部署方式

    • SecurityFilter 注册为 Servlet Filter(在 web.xml 或 Spring Boot 的 @Configuration 中)。

    • 定期运行 dependency-check 并修复高危漏洞。

  2. 扩展功能

    • 动态规则引擎:替换正则匹配为 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
作者
雨落秋垣
发布于
2025年09月07日
许可协议