package com.zsElectric.boot.common.util; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.regex.Pattern; /** * 安全防护工具类 *
* 提供 XSS 攻击和 SQL 注入防护的核心检测方法 * * @author zsElectric */ @Slf4j public class SecurityUtils { /** * SQL 注入检测是否使用严格模式 * 默认为宽松模式以减少误判 */ private static volatile boolean sqlStrictMode = false; /** * 设置 SQL 注入检测模式 * * @param strictMode true 为严格模式,false 为宽松模式 */ public static void setSqlStrictMode(boolean strictMode) { sqlStrictMode = strictMode; } /** * XSS 攻击检测正则表达式 */ private static final Pattern[] XSS_PATTERNS = { // Script 标签 Pattern.compile("", Pattern.CASE_INSENSITIVE | Pattern.DOTALL), Pattern.compile("", Pattern.CASE_INSENSITIVE), // JavaScript 事件 Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE), Pattern.compile("onerror\\s*=", Pattern.CASE_INSENSITIVE), Pattern.compile("onload\\s*=", Pattern.CASE_INSENSITIVE), Pattern.compile("onclick\\s*=", Pattern.CASE_INSENSITIVE), Pattern.compile("onmouseover\\s*=", Pattern.CASE_INSENSITIVE), Pattern.compile("onfocus\\s*=", Pattern.CASE_INSENSITIVE), Pattern.compile("onblur\\s*=", Pattern.CASE_INSENSITIVE), Pattern.compile("onsubmit\\s*=", Pattern.CASE_INSENSITIVE), Pattern.compile("onreset\\s*=", Pattern.CASE_INSENSITIVE), Pattern.compile("onselect\\s*=", Pattern.CASE_INSENSITIVE), Pattern.compile("onchange\\s*=", Pattern.CASE_INSENSITIVE), // iframe 标签 Pattern.compile("", Pattern.CASE_INSENSITIVE | Pattern.DOTALL), Pattern.compile("