JeecgBoot XSS防护:输入过滤与输出转义策略

JeecgBoot XSS防护:输入过滤与输出转义策略

【免费下载链接】JeecgBoot 🔥企业级低代码平台集成了AI应用平台,帮助企业快速实现低代码开发和构建AI应用!前后端分离架构 SpringBoot,SpringCloud、Mybatis,Ant Design4、 Vue3.0、TS+vite!强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领AI低代码开发模式: AI生成->OnlineCoding-> 代码生成-> 手工MERGE,显著的提高效率,又不失灵活~ 【免费下载链接】JeecgBoot 项目地址: https://gitcode.com/jeecgboot/JeecgBoot

概述

XSS(Cross-Site Scripting,跨站脚本攻击)是Web应用中最常见的安全威胁之一。JeecgBoot作为企业级低代码开发平台,提供了全面的XSS防护机制,通过输入过滤输出转义的双重策略,确保应用数据的安全性。

XSS攻击类型与风险

反射型XSS

mermaid

存储型XSS

mermaid

DOM型XSS

mermaid

JeecgBoot后端XSS防护机制

1. XssUtils工具类

JeecgBoot提供了专门的XSS处理工具类 XssUtils,位于:

org.jeecg.modules.system.util.XssUtils
核心实现代码
public class XssUtils {
    private static Pattern[] patterns = new Pattern[]{
        // Script fragments
        Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE),
        // src='...'
        Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
        Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
        // script tags
        Pattern.compile("</script>", Pattern.CASE_INSENSITIVE),
        Pattern.compile("<script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
        // eval(...)
        Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
        // expression(...)
        Pattern.compile("e­xpression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
        // javascript:...
        Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE),
        // vbscript:...
        Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE),
        // onload(...)=...
        Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
    };

    public static String scriptXss(String value) {
        if (value != null) {
            value = value.replaceAll(" ", "");
            for(Pattern scriptPattern: patterns){
                value = scriptPattern.matcher(value).replaceAll("");
            }
        }
        return HtmlUtils.htmlEscape(value);
    }
}

2. SQL注入双重防护

JeecgBoot通过 SqlInjectionUtil 类提供SQL注入防护,同时也包含XSS关键词检测:

public class SqlInjectionUtil {
    // XSS注入关键词黑名单
    private final static String XSS_STR = "and |exec |peformance_schema|information_schema|extractvalue|updatexml|geohash|gtid_subset|gtid_subtract|insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|or |+|--";
    
    // 正则表达式模式检测
    private final static String[] XSS_REGULAR_STR_ARRAY = new String[]{
        "chr\\s*\\(",
        "mid\\s*\\(",
        " char\\s*\\(",
        "sleep\\s*\\(",
        "user\\s*\\(",
        "show\\s+tables",
        "user[\\s]*\\([\\s]*\\)",
        "show\\s+databases",
        "sleep\\(\\d*\\)",
        "sleep\\(.*\\)",
    };
}

3. 输入验证策略

表名验证
public static String getSqlInjectTableName(String table) {
    // 表名正则验证:字母、数字、下划线,以字母开头
    private static Pattern tableNamePattern = Pattern.compile("^[a-zA-Z][a-zA-Z0-9_\\$]{0,63}$");
    
    if (!isValidTableName) {
        throw new JeecgSqlInjectionException("表名不合法,存在SQL注入风险!--->" + table);
    }
}
字段名验证
static final Pattern fieldPattern = Pattern.compile("^[a-zA-Z0-9_]+$");
public static String getSqlInjectField(String field) {
    if (!isValidField) {
        throw new JeecgSqlInjectionException("字段不合法,存在SQL注入风险!--->" + field);
    }
}

JeecgBoot前端XSS防护机制

1. 安全的HTML渲染

前端Vue3项目中使用 v-html 时,通过白名单机制确保安全:

// XSS攻击白名单配置
export const options = {
  whiteList: {
    h1: ['style'], h2: ['style'], h3: ['style'], h4: ['style'], h5: ['style'], h6: ['style'],
    hr: ['style'], span: ['style'], strong: ['style'], b: ['style'], i: ['style'], br: [],
    p: ['style'], pre: ['style'], code: ['style'],
    a: ['style', 'target', 'href', 'title', 'rel'],
    img: ['style', 'src', 'title','width','height'],
    div: ['style'], table: ['style', 'width', 'border', 'height'],
    tr: ['style'], td: ['style', 'width', 'colspan'], th: ['style', 'width', 'colspan'],
    tbody: ['style'], ul: ['style'], li: ['style'], ol: ['style'],
    dl: ['style'], dt: ['style'], em: ['style'], cite: ['style'],
    section: ['style'], header: ['style'], footer: ['style'], blockquote: ['style'],
    audio: ['autoplay', 'controls', 'loop', 'preload', 'src'],
    video: ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width'],
  },
};

2. 内容安全处理

在前端组件中,通过专门的HTML处理方法进行内容渲染:

<template>
  <div v-html="getHtml(item.msgContent)" class="article-content"></div>
</template>

<script>
import { useEmojiHtml } from '/@/components/jeecg/comment/useComment';

export default {
  setup() {
    const { getHtml } = useEmojiHtml(emojiIndex);
    return { getHtml };
  }
}
</script>

防护策略对比表

防护层面技术手段防护效果适用场景
输入过滤正则表达式匹配阻止恶意内容进入系统所有用户输入
输出转义HtmlUtils.htmlEscape防止脚本在浏览器执行动态内容渲染
白名单机制标签属性限制控制允许的HTML元素富文本内容
SQL注入防护关键词检测+正则验证防止数据库攻击数据库操作

实战应用示例

1. 后端控制器防护

@PostMapping("/saveContent")
public Result<?> saveContent(@RequestBody ContentDTO content) {
    // 输入过滤
    String safeTitle = XssUtils.scriptXss(content.getTitle());
    String safeContent = XssUtils.scriptXss(content.getContent());
    
    // SQL注入检测
    SqlInjectionUtil.filterContent(safeTitle);
    SqlInjectionUtil.filterContent(safeContent);
    
    // 保存处理后的安全内容
    contentService.save(safeTitle, safeContent);
    
    return Result.ok("保存成功");
}

2. 前端安全渲染

<template>
  <div class="content-container">
    <h2>{{ safeTitle }}</h2>
    <div v-html="getSafeContent(content)" class="content-body"></div>
  </div>
</template>

<script>
import { options } from './XssWhiteList';
import xss from 'xss';

export default {
  methods: {
    getSafeContent(content) {
      const myxss = new xss.FilterXSS(options);
      return myxss.process(content);
    }
  }
}
</script>

最佳实践建议

1. 输入验证原则

  • 最小权限原则:只允许必要的字符和格式
  • 白名单优于黑名单:明确允许的内容而非阻止已知恶意内容
  • 多层防御:前后端同时进行验证

2. 输出转义策略

mermaid

3. 定期安全审计

  • 检查XSS规则库是否更新
  • 验证白名单配置的合理性
  • 测试边界情况和特殊字符处理

常见问题排查

1. 内容显示异常

如果发现内容显示不正常,检查:

  • XSS过滤规则是否过于严格
  • 白名单配置是否包含所需标签
  • 转义函数是否正确使用

2. 性能优化

对于大量内容处理:

  • 考虑异步处理机制
  • 使用缓存减少重复处理
  • 优化正则表达式性能

总结

JeecgBoot通过多层次、全方位的XSS防护策略,为企业应用提供了可靠的安全保障。从后端的输入过滤和SQL注入防护,到前端的输出转义和白名单机制,形成了完整的防护体系。开发者应充分理解这些机制的原理和使用方法,在实际开发中遵循安全最佳实践,确保应用的安全性。

记住:安全不是功能,而是责任。在享受JeecgBoot低代码开发便利的同时,务必重视安全防护,构建更加健壮的企业应用。

【免费下载链接】JeecgBoot 🔥企业级低代码平台集成了AI应用平台,帮助企业快速实现低代码开发和构建AI应用!前后端分离架构 SpringBoot,SpringCloud、Mybatis,Ant Design4、 Vue3.0、TS+vite!强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领AI低代码开发模式: AI生成->OnlineCoding-> 代码生成-> 手工MERGE,显著的提高效率,又不失灵活~ 【免费下载链接】JeecgBoot 项目地址: https://gitcode.com/jeecgboot/JeecgBoot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值